2013-10-09 38 views
0

假设我有一个名为myProc(变量varchar2)的程序;如何获得程序输入变量的名称(PLSQL)

然后我把它叫做:

exec myProc(actionVariable); 

有没有一种方法,如何获得“actionVariable”在过程myproc一个字符串?所以当我使用不同的程序时:

exec myProc(anotherVariable); 

我将在过程myProc中获得'anotherVariable'作为字符串。

谢谢。我只发现我可以通过'select_name from user_arguments ....'获得原始变量名称。'

+1

号为什么知道调用者使用它的变量的本地私有名称会很有用?如果它甚至有一个名字 - 如果一个文字被传递,你会期望什么,'exec myProc('Some string value')'?如果你只有一小部分的调用者,我想你可以添加另一个参数,并将他们设置为他们的局部变量名称,但是重要的是什么? –

+0

你是对的。我只需要“myProc”的简单可用性。需要通过添加一行来实现它的funcionality(不声明变量等)。我需要这个名字,因为它具有标准的名字结构,我可以从中快速获得重要信息。所以你说,只有可能的方法是像“exec myProc(anotherVariable,'anotherVariable');”我可以声明变量nameVariable ='anotherVariable';但是,而不是一行我需要编写更多的行实现这个功能.... – user1518308

+0

我不确定你的意思是两行;你的意思是你的proc将是两行代码,或者这个调用需要两行代码,或者其他的东西?您不必为调用声明变量,只需传递一个文字字符串即可。无论如何,是的,我认为唯一能做你想做的事情的方法就是将名称作为另一个变量。 –

回答

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');