如何获取程序的输入变量名称(PLSQL)

时间:2013-10-09 08:49:56

标签: sql oracle stored-procedures plsql sqlplus

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

的过程

然后我称之为:

exec myProc(actionVariable);

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

exec myProc(anotherVariable);

我将在程序myProc中将'anotherVariable'作为字符串获取。

感谢。我只发现我可以使用'select argument_name from user_arguments ....'

获取原始变量名

1 个答案:

答案 0 :(得分: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');