Эффективное программирование на PL/SQL - Именованные параметры функции
ОГЛАВЛЕНИЕ
Страница 8 из 9
Именованные параметры функции
Рассмотрим простую функцию:
create or replace function myfunc
(
p_param1 number,
p_param2 number
)
return number
is
begin
return p_param1 + p_param2;
end;
/
Эта функция делает очень простую операцию, но она хорошо демонстрирует концепцию. Так как в этой функции два параметра, то её можно вызвать, передав параметры, как позиционные значения, а именно:
myfunc (1,2)
Или как именованные параметры:
myfunc ( p_param1 => 1, p_param2 => 2)
Однако, в конце концов возникает проблема, если использовать её в select-предложениях. Если в Oracle Database 10 g выполнить следующее предложение:
SQL> select myfunc (p_param1=>1,p_param2=>1) from dual;
возникнет ошибка:
select myfunc (p_param1=>1,p_param2=>1) from dual
*
ERROR at line 1:
ORA-00907: missing right parenthesis
В Oracle Database 11 g вы вправе использовать нотацию:
SQL> select myfunc (p_param1=>1,p_param2=>1) from dual;
MYFUNC(P_PARAM1=>1,P_PARAM2=>1)
-------------------------------
2
1 row selected.
...которая работает правильно. Можно указывать именованную нотацию в конце, а первые параметры должны быть позиционными. Например, следующий вызов, где параметр p_param1 равен 1, будет корректным:
select myfunc (1,p_param2=>2) from dual
А этот нет (позиционный параметр в конце):
SQL> select myfunc (p_param1=>1,2) from dual;
select myfunc (p_param1=>1,2) from dual
*
ERROR at line 1:
ORA-06553: PLS-312: a positional parameter association may not follow a named association