Динамический c Столбец на SQL не работает (APEX, Интерактивный отчет) - PullRequest
1 голос
/ 24 апреля 2020

Я попытался реализовать страницу в APEX (19.2), где пользователь должен сделать ввод, который является именем столбца. Эти входные данные должны ограничивать оператор выбора в предложении where и являются следующими:

select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;

: P904_COLUMN и: P904_AUSDRUCK; оба элемента APEX, которые необходимы для ввода пользователем.

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

Я также попробовал его с PL / SQL, который возвращает оператор SQL -, подобный следующему:

declare
statement varchar2(4000);

begin


statement:= 'SELECT * FROM UEBERSICHT where
 :P904_COLUMN = :P904_AUSDRUCK;';

return statement;
end;

Другой подход состоял в том, чтобы сначала сохранить входные данные в переменной и записать имя переменной в SQL - выражение:

 declare
statement varchar2(4000);
spalte varchar2(50);
begin

if :P904_COLUMN = '"Gesellschaft"' then spalte := '"Gesellschaft"'; end if;    
statement:= 'SELECT * FROM UEBERSICHT where
 '||spalte||' = :P904_AUSDRUCK;';

return statement;
end;

Здесь я получаю эту синтаксическую ошибку, которая не должна отображаются нормально: «ORA-20999: синтаксический анализ возвращенных результатов запроса в» ORA-20999: не удалось проанализировать запрос SQL!

ORA-06550: строка 5, столбец 6: ORA-00936: отсутствует выражение

"."

Как решить эту проблему?

PS: Да, я отправляю все элементы APEX.

Обновление: отладка показывает мне, что я получаю входные данные, но интерактивный отчет не дает никакого вывода.

1 Ответ

1 голос
/ 24 апреля 2020

ЕСЛИ все столбцы в :P904_COLUMN имеют значение same data type, вы можете использовать что-то вроде ниже, где A и B являются именами столбцов

 select * FROM UEBERSICHT where
 DECODE(:P904_COLUMN,'A',A,'B',B) = :P904_AUSDRUCK;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...