2017-01-25 2 views
0

У меня есть хранимая процедура в базе данных Oracle, которая получает 3 параметра.Могу ли я узнать количество параметров, переданных в хранимой процедуре в Oracle PL/SQL

Я знаю, что я называю это параметрами от 1 до 3, но можно узнать внутри себя, сколько аргументов являются значениями по умолчанию или действительно переданы?

Например:

  • фиктивной (1) некоторые ключевые слова говорят мне "1"
  • фиктивная (1,2,3) говорят мне "3"

Я спрашиваю, потому что Я работал с Informix 4GL, и я мог использовать «NARGS», чтобы узнать количество аргументов, которые я получаю.

+0

Вы имеете в виду, вы хотите знать номер аргумента внутри SP? –

+0

Да, это вопрос. Мне нужно знать это, чтобы выполнить некоторые фрагменты кода в зависимости от количества аргументов. Спасибо –

+2

Затем установите значение по умолчанию равным null и проверьте, являются ли параметры нулевыми или нет. – OldProgrammer

ответ

1

Короткий ответ: нет. Нет эквивалента NARGS или arg C.

Если вы используете нулевые значения по умолчанию, вы можете вручную подсчитать количество аргументов, которые не равны значению по умолчанию .. но это не скажет вам, явно ли вы передаете значение по умолчанию в качестве параметра.

Я могу думать о 2 решениях. 1. пользователь перегруженные процедуры .. т.е.

procedure a (p_1 number); 
procedure a (p_1 number, p_2 number); 
procedure a (p_1 number, p_2 number, p_3 number); 

затем в телах вы бы «знать», с помощью которого один вы находитесь в.

вариант 2. Провести VARRAY/PLSQL стол как один аргумент, но то фактически передача аргументов становится проблематичной.

create or replace package x 
is 

type an_arg is record (n number, v varchar2(2000), d date); 
type args is table of an_arg; 

procedure a(argv args); 

end; 
/

create or replace package body x 
is 

procedure a(argv args) 
is 
begin 
    dbms_output.put_line('i was passed '||argv.count||' arguments'); 

end; 

end; 
/
Смежные вопросы