2013-10-09 4 views
0

Предположим, у меня есть процедура, называемая myProc (переменная varchar2);Как получить имя входной переменной процедуры (PLSQL)

Тогда я называю это:

exec myProc(actionVariable); 

Есть ли способ, как получить «actionVariable» в виде строки в процедуре MyProc? Поэтому, когда я использую процедуру по-разному:

exec myProc(anotherVariable); 

Я получу 'anotherVariable' как строку в процедуре myProc.

Спасибо. Я только обнаружил, что могу получить имя переменной источника с помощью «select argument_name from user_arguments ....»

+1

No. Почему было бы полезно знать местное, личное имя, которое ваш абонент использует для своей переменной? Если у него даже есть имя - что бы вы ожидали, если был передан литерал, 'exec myProc ('Некоторое строковое значение')'? Если у вас есть только очень маленький набор абонентов, я думаю, вы могли бы добавить еще один аргумент и заставить их установить это имя своей локальной переменной, но какой смысл? –

+0

Вы правы. Мне просто нужно простое использование «myProc». Необходимо реализовать его функциональность, просто добавив одну строку (без декларации переменных и т. Д.). И мне нужно имя, потому что оно имеет стандартную структуру имени, из которой я могу быстро получить важную информацию. Итак, вы говорите, что только возможным способом является вызов «myProc» как «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'); 
Смежные вопросы