Oracle 使用EXECUTE\u IMMEDIATE调用子过程

Oracle 使用EXECUTE\u IMMEDIATE调用子过程,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我有一个函数,其中包含多个子过程: 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;';

我有一个函数,其中包含多个子过程:

  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’必须声明


有办法做到这一点吗?

不,你不能那样做。
proc1
等。本地过程超出范围,在动态SQL上下文中不可见

您可能会使用一个包来实现类似的效果,但过程必须是公开的(即在包规范中声明)


不过,这看起来不像是您应该动态执行的操作。如果要决定在运行时调用哪个过程,在每个分支中使用具有不同过程调用的案例陈述-类似。

感谢您的快速响应PooleThanks先生的快速响应Poole先生-我的问题是,我必须根据规则和分配给这些规则的等级动态调用几十个子过程(这是我从oracle表中读取的-排名可以由业务所有者动态更改)-因此,如果您愿意,我需要一种以动态顺序执行过程的方法-非常不幸的是,oracle不允许我执行名称存储为变量值的子过程。。。