#oracle #function #plsql #parameters #procedures
#Oracle #функция #plsql #параметры #процедуры
Вопрос:
У меня путаница в отношении параметра OUT и ВОЗВРАЩАЕМОГО типа функции в oracle PL SQL. У меня есть несколько вопросов по этому поводу.
- Может кто-нибудь, пожалуйста, объяснить разницу между ними?
- Может ли функция иметь как входной, так и выходной параметр, как процедура?
- Возможно ли вернуть более одного значения с помощью функций?
Я искал в Интернете, но получаю разные ответы, которые еще больше меня смущают.
Комментарии:
1. один возврат вы можете смешивать
in
out
иin out
по своему усмотрению.2. Вы можете создать a
TYPE
с несколькими членами и возвращать этот тип3. Спасибо за объяснение, Кевин
Ответ №1:
1) Если функция имеет только IN
параметры, вы можете использовать эту функцию в запросах.
create or replace function my_func( i in integer)
return integer as
begin
return i 1;
end;
select my_func(1) from dual;
2) Да. В функциях разрешено использовать IN
OUT
параметры и .
create or replace function my_func( i in integer, j out integer, k in out integer) return integer as
begin
j:= i 2;
k:= k i;
return i 1;
end;
3) Да, вы можете использовать много OUT
параметров, но только один RETURN
create or replace function my_func( i in integer, j out integer, k out integer)
return integer as
begin
j:= i 2;
k:= i 3;
return i 1;
end;
Комментарии:
1. спасибо за ответ. Я выполнил код, приведенный для моих 3-х вопросов, и я понял, что произойдет, если мы зададим более одного параметра out в функциях.
2. У меня есть еще один запрос, во многих местах упоминалось, что не рекомендуется использовать параметр OUT в функции, и в таком сценарии лучше использовать процедуру. В чем разница. Не могли бы вы объяснить мне, почему процедура с параметром OUT лучше, чем функция? … Заранее спасибо
3. Я думаю, это означает, что ваш код будет более понятным, если вы не будете смешивать
return
иout
параметры в функциях. Если вам нужно вернуть только одно значение, то function it — лучший способ. Если вам нужно использовать многоout
параметров, используйте процедуры сout
параметрами. Но в PL / SQL у нас нет никаких ограничений на использованиеout
параметров в функциях.
Ответ №2:
- Если вы хотите вернуть более одного значения из функции, вы можете вернуть ранее определенный тип пользователя, который содержит много полей. Однако это немного грязное решение.