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

Sql 使用调用过程的execute immediate语句中的out参数,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我有一个过程,它有一个executeimmediate语句。在该executeimmediate语句中,调用具有两个out参数的过程。我在尝试获取那些out参数时遇到问题,这些参数将在调用execute immediate语句的过程中使用 execute_stmt := 'DECLARE pi_error_log_rec error_log%ROWTYPE; p_plan_id NUMBER; begin SCHEMA.PACKAGE_NAME.' || PROC

我有一个过程,它有一个executeimmediate语句。在该executeimmediate语句中,调用具有两个out参数的过程。我在尝试获取那些out参数时遇到问题,这些参数将在调用execute immediate语句的过程中使用

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\u计划\u id
pi\u错误\u日志\u rec
,其余为IN参数。所以我需要获得这两个输出,以便在调用executeimmediate的过程中使用。但它并没有在变量中设置输出。我是否遗漏了一个步骤,或者我应该使用不同的方法来使用out参数?

试试这个:

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数据类型(如
记录
布尔值
)提取到动态SQL中。在早期版本中,您仅限于SQL数据类型(如
NUMBER
VARCHAR2
等)

谢谢。这解决了我的问题。但我认为这是真实的记录类型。我得到一个错误,说它必须使用sql类型。