我有一个函数,里面有几个子程序:
create function func1 return varchar2
v_string varchar2(100);
proc1;
proc2;
proc3;
begin
v_string := 'proc' || '1'; --- trying to make it simple
execute immediate 'BEGIN '|| v_string ||'; END;';
...
直接调用子程序确实有效;但我有几十个子程序 - 所以我用' proc'形成一个字符串变量。命名并尝试在循环中动态执行它。
当我这样做时,我收到错误 - ' proc1'必须宣布。
有没有办法实现这个目标?
答案 0 :(得分:3)
不,你不能这样做。 proc1
等本地过程超出范围,在动态SQL上下文中不可见。
您可能会使用包来实现类似的效果,但程序必须是公开的(即在包规范中声明)。
这看起来不像你应该动态做的事情。如果要确定在运行时调用哪个过程,请在每个分支中使用带有不同过程调用的case语句 - 类似the example at the end of this answer。