2014-06-12 4 views
0

실행 즉시 문이있는 프로 시저가 있습니다. 실행 즉시 명령문은 두 개의 out 매개 변수가있는 프로 시저를 호출합니다. 즉시 실행 문을 호출하는 프로 시저에서 사용할 매개 변수를 가져 오는 데 문제가 있습니다.프로 시저를 호출하는 실행 즉시 문에서 out 매개 변수를 사용하십시오.

execute_stmt := 'DECLARE pi_error_log_rec error_log%ROWTYPE; p_plan_id NUMBER; begin SCHEMA.PACKAGE_NAME.' || 
       PROCEDURE || '(' || 
       p_audit_log_id || ', ' || 
       V_PARAMETER1 || ', ' || '''' || 
       V_PARAMETER2 || '''' || 
       ', p_plan_id, pi_error_log_rec); end;'; 
execute immediate execute_stmt; 

if(pi_error_log_rec.error_text IS NOT NULL) THEN 
    --do stuff; 
ELSE 
    --do stuff; 

아웃 된 파라미터 남은 파라미터에있다 p_plan_idpi_error_log_rec하고있다. 그래서이 실행 즉시 호출하는 프로 시저 내에서 사용하기 위해 두 개의 출력을 얻이 필요가있다. 그러나 변수에 출력을 설정하지는 않습니다. 단계가 빠지거나 매개 변수를 사용할 때 다른 접근 방식을 사용해야합니까?

답변

3

이 하나를 시도

execute_stmt := 'Begin SCHEMA.PACKAGE_NAME.PROCEDURE(:p_audit_log_id, :V_PARAMETER1, :V_PARAMETER2); END;'; 
execute immediate execute_stmt USING IN p_audit_log_id, OUT pi_error_log_rec, OUT p_plan_id; 

오라클 12C 때문에 당신은 또한 PL/SQL 데이터 유형을 가져올 수 있습니다 (같은 RECORDS, BOOLEAN) 동적 SQL에. 이전 버전에서는 SQL 데이터 유형으로 만 제한되는 곳 (예 : NUMBER, VARCHAR2 등)

+0

감사합니다. 이것은 내 문제를 해결했다. 하지만 레코드 유형에 대해서는 사실이라고 생각합니다. SQL 형식을 사용해야한다는 오류가 발생했습니다. – Alkey29

+0

RECORD TYPES에 대한 업데이트 된 답변보기 –

관련 문제