0

假设我有一个名为 myProc(variable varchar2); 的过程

然后我称之为:

exec myProc(actionVariable);

有没有办法,如何在过程 myProc 中获取“actionVariable”作为字符串?所以当我以不同的方式使用程序时:

exec myProc(anotherVariable);

我将在过程 myProc 中获取“anotherVariable”作为字符串。

谢谢。我只发现我可以使用'select argument_name from user_arguments ....'获取原始变量名

4

1 回答 1

1

您无法确定调用者分配给它传递的变量的名称(据我所知;也许您可以使用 PL/Scope 破解某些东西,但它会很可怕)。

我可以看到三个选项,具体取决于您需要多少变化。我假设您的评论中没有多少名称会影响该过程所针对的表。

您可以将变量名称或您感兴趣的位作为单独的参数传递:

procedure myProc(variable varchar2, variable_name varchar2) ...
exec myProc(varIDShop, 'Shop');

您可以使用每个变体的包装程序稍微调整一下:

procedure myProc(variable varchar2, variable_name varchar2) ...
procedure myProcShop(variable varchar2) is
begin
  myProc(variable, 'Shop');
end;
/
exec myProcShop(varIDShop);

...所以你的电话只需要选择相关的包装函数来调用。

或者您可以声明多个变量,每个变量一个,并且只设置相关的一个:

procedure myProc(shop_variable varchar2, office_variable varchar2, ...) ...
exec myProc(shop_variable => varIDShop);

...然后测试程序中设置的内容。

最后两个都意味着您的调用仍然只有一个参数,但它们有点复杂,并且有可能使用错误的变量名称或过程名称(剪切和粘贴错误)。虽然第一个也是如此,我想。

但是,这些都没有直接在调用者中使用变量名。但另一方面,您可以调用它们中的任何一个,例如用于测试,而无需声明变量 - 只需传递一个字符串文字:

exec myProc('Tesco', 'Shop');
exec myProc(shop_variable => 'Sainsbury');
exec myProcShop('Asda');
于 2013-10-09T09:40:29.340 回答