PL/SQL: используйте оператор "IF" вне предложения "WITH ... AS"

Я пытаюсь написать процедуру, в которой я использую подзапрос с факторингом "WITH .. AS", но когда я использую "IF .. THEN" до этого, я получаю синтаксическую ошибку, я не знаю, как ее написать, любую помощь?

  BEGIN
  OPEN my_SYS_REFCURSOR FOR
   IF .. IS NULL
   THEN
     WITH SomeName
          AS (SELECT.....);

1 ответ

Решение

Вам просто нужно отделить IF заявление от OPEN:

declare
    my_sys_refcursor sys_refcursor;
begin
    if (1=1) then /* condition satisfied, cursor from some table */
        open my_sys_refcursor for
        with somename as ( select '1' as one from dual)
        select one
        from somename;
    else  /* condition not satisfied, select from different tables */
        open my_sys_refcursor for
        with someOthername as ( select 'one' as one from dual)
        select one
        from someOthername;
    end if;
end;
Другие вопросы по тегам