假设我有一个只公开一个程序的包。但是,此过程的目的是根据传递给它的参数调用包中的私有过程。
理想情况下,我想定义一个将参数映射到内部过程的哈希表(例如,关联数组甚至表),然后执行以下操作:
execute immediate 'begin ' || internalProc(myArgument) || '; end;';
但是,这不起作用,因为动态begin ... end
PL/SQL 块是在包范围之外执行的。我什至做不到'begin myPkg.' || internalProc...
,因为内部程序都是私有的。
因此,我可以实现这一点(不暴露私有过程)的唯一方法是拥有一个巨大的硬编码开关吗?
case myArgument
when 'something' then someProc;
when 'foo' then fooProc;
when 'bar' then barProc;
...
else raise_application_error('-20001, 'No such process.')
end case;