您无法确定调用者分配给它传递的变量的名称(据我所知;也许您可以使用 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');