2017-01-23 3 views
0

하위 쿼리를 'WITH .. AS'로 사용하는 절차를 작성하려고하는데 'IF .. THEN' 그 전에는 구문 오류가 발생합니다. 어떻게 작성해야합니까?PL/SQL : 'WITH ... AS'절의 외부에 'IF'문을 사용하십시오.

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

아마, 당신은'IF 반면,이 오류가 ... THEN'은 PL/SQL 구조입니다. 달성하고자하는 것은 무엇입니까? 'ELSE' 부분은 어떻게 생겼습니까? 정말 lije을 찾기 위해 내 절차를 필요로 무엇 –

+0

은 그 '(.. ..... 다음 선택 NULL 인 경우) SomeName AS 함께 에 대한 OPEN my_SYS_REFCURSOR을 BEGIN, '그러나 나는뿐만 아니라 구문 오류가 발생했습니다. –

+1

앞서 언급했듯이 그건 불가능합니다. SQL 문에서 'IF'를 사용할 수 없습니다. 질문을 편집하고 더 많은 정보를 추가하십시오 : ELSE 부분은 어떻게 생겼습니까? 또는 조건이 충족되는 경우에만 참조 커서를 열고 싶지 않은 경우 참조 커서를 초기화하지 않은 채로두고 싶습니까? –

답변

1

당신은 단순히 OPEN에서 IF 문을 분리해야합니다 'OPEN이 ... FOR`는 SQL 문을 기대하고 있기 때문에

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;