如何解决是否可以在Oracle for loop中运行存储过程?
我对一种可能性有疑问。我已经在Oracle数据库版本12c中创建了一个存储过程。它需要一个参数才能运行。通过传递如下参数使其正常运行:
EXEC My_Procedure_Name(parameter_value);
通过运行上述代码,一切都会顺利进行。
现在,我将每天运行此过程(实际上是上面的代码)两个月。因此,我编写了这样的脚本:
declare stmt varchar2(100);
begin
for i in (days of months)
loop
stmt:='EXEC My_Procedure_Name(parameter_value);';
EXECUTE IMMEDIATE stmt;
commit;
end loop;
end;
我的问题是:提到的脚本正确吗?会行得通吗?我的脚本有问题吗?
谢谢
解决方法
要在循环中调用过程,语法如下:
begin
for i in 1..5 loop
dbms_output.put_line(i);
end loop;
end;
我假设for i in (days of months)
是伪代码,您实际上将使用一些有效的构造来满足您的要求。
如果您确实需要使用动态代码,可以这样做,但是请注意PL / SQL没有EXEC
关键字。您将需要以下内容:
begin
for i in 1..5 loop
execute immediate 'begin dbms_output.put_line(:i); end;' using i;
end loop;
end;
或
begin
for i in 1..5 loop
execute immediate 'call dbms_output.put_line(:i)' using i;
end loop;
end;
(请注意,PL / SQL具有;
语句终止符,而SQL没有。)
如您所见,动态代码更加复杂,因此除非没有其他选择,否则最好避免使用它。
,相反,您可以尝试以下代码而不使用立即执行,而只是引用循环变量-
declare stmt varchar2(100);
begin
for i in (days of months)
loop
My_Procedure_Name(i.parameter_value);
commit;
end loop;
end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。