使用调用过程的execute immediate语句中的out参数

时间:2014-06-12 18:14:39

标签: sql oracle stored-procedures plsql

我有一个具有执行立即声明的过程。在该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_idpi_error_log_rec,其余为IN参数。所以我需要获取这两个输出,以便在调用此execute immediate的过程中使用。但它没有在变量中设置输出。我错过了一个步骤,还是应该使用不同的方法来使用参数?

1 个答案:

答案 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数据类型(如RECORDSBOOLEAN)提取到动态SQL中。在早期版本中,您仅限于SQL数据类型(如NUMBERVARCHAR2等)