Oracle Apex 5.1 Динамический SQL - PullRequest
0 голосов
/ 19 января 2019

как сделать динамический SQL перед отчетом пользователям в Apex 5.1?мой запрос:

declare
    q varchar2(4000);
begin
    q := 'select * from tb1 t';
    if :Param1 is not null then
        q := q || ' where t.name = :Param1';
    end if;

return q;
end;

: Param1 не является обязательным для пользователей.

Я хочу, если : Param1 равен нулю тогда мой запрос выполняется без any where.в противном случае в моем запросе укажите пункт where.

Дело в том, что мой Apex версии 5.1

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вы можете использовать этот способ ниже, используя ключевые слова rowtype и type для значений whole row и column соответственно:

SQL> set serveroutput on
SQL> declare
    q         varchar2(4000);
    rt        tb1%rowtype;
    i_name    tb1.name%type := 'Mohammad';
    o_surname tb1.surname%type;
begin
    q := 'select * from tb1 t';
    if i_name is not null then
        q := q || ' where ( t.name = :Param1 or :Param1 is null )'; 
    end if;
  execute immediate q into rt using i_name, i_name; 
 -- "i_name" appears twice because of ":Param1" appears twice in the string "q"
  o_surname := rt.surname;
  dbms_output.put_line(rt.surname);
end;

Taleshi

, поскольку есть только один параметр, то :Param1 соответствует i_name. Если у нас было более одного параметра, то все должно совпадать в порядке появления параметров связывания в строке sql с переменными, разделенными запятыми, такими как i_name, .... в списке using.

0 голосов
/ 19 января 2019

Если этот запрос используется в качестве источника для области отчета, вам не нужно использовать динамический SQL, а просто OR условие:

select * 
from tb1 t
where (t.name = :param1 or :param1 is null)

То же самое будет работать и в других местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...