使用调用过程的立即执行语句中的out参数

Alk*_*y29 1 sql oracle plsql stored-procedures

我有一个具有立即执行语句的过程。在该execute立即语句中调用具有两个out参数的过程。我在尝试获取那些要在调用execute立即语句的过程中使用的参数时遇到麻烦。

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;
Run Code Online (Sandbox Code Playgroud)

out参数为p_plan_idpi_error_log_rec,其余为IN参数。因此,我需要获得这两个输出,以在调用立即执行的过程中使用。但这不是在变量中设置输出。我是否缺少步骤,还是应该使用其他方法来使用参数?

Wer*_*eit 6

试试这个:

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;
Run Code Online (Sandbox Code Playgroud)

由于Oracle 12c中还可以获取PL / SQL数据类型(如RECORDSBOOLEAN)为动态SQL。在早期版本的你在哪里限于SQL数据类型只(如NUMBERVARCHAR2等)