我有一个具有执行立即声明的过程。在该execute语句中调用一个具有两个out参数的过程。我在尝试获取要在调用execute immediate语句的过程中使用的那些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;
out参数为p_plan_id
和pi_error_log_rec
,其余为IN参数。所以我需要获取这两个输出,以便在调用此execute immediate的过程中使用。但它没有在变量中设置输出。我错过了一个步骤,还是应该使用不同的方法来使用参数?
答案 0 :(得分:4)
试试这个:
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;
从Oracle 12c开始,您还可以将PL / SQL数据类型(如RECORDS
,BOOLEAN
)提取到动态SQL中。在早期版本中,您仅限于SQL数据类型(如NUMBER
,VARCHAR2
等)