gpt4 book ai didi

stored-procedures - 如何动态调用存储过程?

转载 作者:行者123 更新时间:2023-12-02 21:08:44 25 4
gpt4 key购买 nike

FOR rec IN ( SELECT Procedure_Name 
FROM DATAMART_PROCESS_STEPS
ORDER BY Procedure_Order )
LOOP
EXECUTE rec;
END LOOP;

我有一个过程管理表DATAMART_PROCESS_STEPS中的一系列过程,并且我需要动态运行该表中的每个过程。 Oracle SQL Developer 不喜欢我执行过程的方式;它会抛出语法错误。完成这项任务的正确方法是什么?

EXECUTE 'BEGIN ' || rec || '; END';

在阅读有关存储过程的教程后,我也尝试过此操作,但它存在单引号问题。帮助。如果您需要更多详细信息或代码,请询问。

提前谢谢您。

最佳答案

execute command是 SQL*Plus/SQL Developer 匿名 PL/SQL block 的简写。它在其他 PL/SQL 中无效,包括在您的主过程中。

PL/SQL 中的动态调用使用不相关的 execute immediate statement ,正如语法图所示,immediate 关键字不是可选的。

execute immediate syntax diagram

正如您已经意识到的那样,本例中的动态 SQL 语句需要是围绕游标提供的过程名称的匿名 PL/SQL block 。但是您的第二个版本在连接到字符串的 END 之后缺少分号;并且您直接引用 rec 而不是该记录类型中的列,即使用光标选择的列的名称。

所以你的循环需要做:

FOR rec IN ( SELECT Procedure_Name 
FROM DATAMART_PROCESS_STEPS
ORDER BY Procedure_Order )
LOOP
EXECUTE IMMEDIATE 'BEGIN ' || rec.procedure_name || '; END;';
END LOOP;

关于stored-procedures - 如何动态调用存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com