Вы не можете определить имя, которое ваш вызывающий абонент присвоил переменной, которую он передал (насколько я знаю; возможно, вы могли бы взломать что-то с 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');
No. Почему было бы полезно знать местное, личное имя, которое ваш абонент использует для своей переменной? Если у него даже есть имя - что бы вы ожидали, если был передан литерал, 'exec myProc ('Некоторое строковое значение')'? Если у вас есть только очень маленький набор абонентов, я думаю, вы могли бы добавить еще один аргумент и заставить их установить это имя своей локальной переменной, но какой смысл? –
Вы правы. Мне просто нужно простое использование «myProc». Необходимо реализовать его функциональность, просто добавив одну строку (без декларации переменных и т. Д.). И мне нужно имя, потому что оно имеет стандартную структуру имени, из которой я могу быстро получить важную информацию. Итак, вы говорите, что только возможным способом является вызов «myProc» как «exec myProc (anotherVariable,« anotherVariable ») ;. Я могу объявить переменную nameVariable = 'anotherVariable' ;, но вместо одной строки мне нужно закодировать больше строк для реализовать эту функцию .... – user1518308
Я не уверен, что вы имеете в виду около двух строк; вы имеете в виду, что ваш proc будет состоять из двух строк кода, или для вызова потребуется две строки или что-то еще? Вам не нужно объявлять переменную для вызова, вы можете просто передать литеральную строку. Во всяком случае, да, я думаю, что единственный способ сделать то, что вам кажется, это передать имя в качестве другой переменной. –