2014-12-30 5 views
0

동적 SQL 문에서 변수를 바인드하려고 시도하는 중 오늘 아침 까다로운 상황이 발생했습니다. 상황이있다 동일한 바인드 변수를 동적 SQL 블록에 여러 번 사용하려고합니다.동적 SQL의 변수 바인딩 제한

ORA-01008: not all variables bound 
ORA-06512: at "SCHEMA.TEST_FUNCTION", line 19 

내가 동적 SQL을 수정하는 경우 :

select test_function (3, 1) from dual; 

내가 오류를 얻을 : 나는 두꺼비에서 다음 문을 실행 다음

create or replace function test_function (v1 number, v2 number) 
    return sys_refcursor 
is 
    cur sys_refcursor; 
    v_sql clob := 'select 1 as col1,' 
       ||chr(10)||'  nvl ((select ''a = 2''' 
       ||chr(10)||'    from dual' 
       ||chr(10)||'    where :a = 2),' -- First occurance of `a` 
       ||chr(10)||'   ''a != 2'')' 
       ||chr(10)||'   as col2,' 
       ||chr(10)||'  nvl ((select ''a = 3''' 
       ||chr(10)||'    from dual' 
       ||chr(10)||'    where :a = 3),' -- Second occurance of `a` 
       ||chr(10)||'   ''a != 3'')' 
       ||chr(10)||'   as col2' 
       ||chr(10)||' from dual' 
       ||chr(10)||' where :b = 1'; -- another var `b` used just once 
begin 
    open cur for v_sql using v1, v2; 
    return cur; 
end; 
/

:

다음 코드를 고려 바인드 변수 a의 두 번째 발생을 제거하면 작동합니다. 오라클 문서 here, herehere을 참조하려고했지만 관련이 없습니다. 도와주세요.

답변