Oracle Pl/SQL: Можно ли ссылаться на столбец таблицы через varchar2?

Всем привет!

Есть функция на PLSQL где я в зависимости от параметра должен вести поиск по определенным столбцам.
Допустим, если academ_level_id = 1 , тогда я должен вести поиск по столбцу COLUMN1

Экспериментальная таблица примерно вот такая my_settingse_rule(ID , COLUMN1 ,COLUMN2 )
Но на самом деле таких COLUMN штук 10! плюс нужно сочетать и с другими условиями
CREATE OR REPLACE FUNCTION get_setting_min( id number , academ_level_id IN academic_level.academiclevelid%type)
  RETURN number
IS
  l_min number;
  a_to_use VARCHAR2(80);
BEGIN

  CASE academ_level_id
    WHEN 1 THEN a_to_use := 'COLUMN1';
    WHEN 2 THEN a_to_use := 'COLUMN2';
    ELSE a_to_use := 0;
  END CASE;
  select rsre.TERM_MIN
      into l_min
      from my_settingse_rule rsre 
      where  rsre.a_to_use = 1 and rsre.id = id;
 return l_min;
END ;

where rsre.a_to_use = 1 and rsre.id = id;

Код не работает, выдает ошибку.
Error(45,39): PL/SQL: ORA-00904: "RSRE"."A_TO_USE": invalid identifier
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 2
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Ну или так, без execute immediate
select rsre.TERM_MIN
      into l_min
      from my_settingse_rule rsre 
      where  rsre.id = id
      and 
      ( (rsre.COLUMN1 =1 and academ_level_id =1) or (rsre.COLUMN2 =1 and academ_level_id =2) or academ_level_id > 2 )
Ответ написан
@alpodrezov
Orcale developer
Если полей много и запрос может меняться в зависимости от условий то использовать dynamic sql
execute immediate 'select * from ' || table_name || ' a ' || 'where a.' || column_name;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы