Невозможно использовать переменную связывания в качестве имени таблицы в SQL-запросе APEX ORACLE - PullRequest
0 голосов
/ 17 мая 2018
SELECT * FROM :TABLENAME 

- это мой запрос, и Apex не позволяет мне работать, потому что приложение не знает имени таблицы.Как я могу динамически запрашивать, используя переменную в качестве имени таблицы.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы должны знать, к каким таблицам может потребоваться запросить форму.Если у вас есть элемент приложения с именем TABLE_NAME, вы можете объединить результаты и выбрать нужную таблицу следующим образом:

select col1, col2, col3 from tablex where :TABLE_NAME = 'TABLEX'
union all
select col1, col2, col3 from tabley where :TABLE_NAME = 'TABLEY'
union all
select col1, col2, col3 from tablez where :TABLE_NAME = 'TABLEZ'

Преимущество этого подхода состоит в том, что запрос будет проверен на правильный синтаксиси что таблицы имеют правильные столбцы;и это решение защищено от атак SQL-инъекций.

Недостатком является то, что при добавлении новой таблицы необходимо изменить запрос.Но если вы создаете таблицы на лету, как это, то вам все равно стоит пересмотреть свою стратегию.

0 голосов
/ 17 мая 2018

Вот как:

  • создайте классический отчет, используя оператор dummy SELECT, например select * from dual
  • , создайте текстовый элемент на этой странице,давайте назовем его P22_TABLE_NAME
  • , установив для его свойства "Отправить при вводе нажатие" значение "Да"
  • отредактируйте источник отчета и установите для типа * тело функции PL / SQL, возвращающее запрос SQL
  • Тело функции должно иметь значение return 'select * from ' || :P22_TABLE_NAME;
  • установить для свойства "Использовать общие имена столбцов" значение "Да", поскольку вы используете разные имена таблиц и все из них (наиболее вероятно)иметь разные столбцы
  • запустить страницу;когда вы вводите разные имена таблиц в элемент P22_TABLE_NAME и нажимаете клавишу Enter, содержимое отчета должно измениться
...