[TL; DR] Функции с выходными параметрами могут использоваться только в PL/SQL.
В качестве примера:
CREATE FUNCTION test_out(
value OUT NUMBER
) RETURN NUMBER
IS
BEGIN
value := 1;
RETURN 2;
END;
/
Вы можете запустить это в PL/SQL:
SET SERVEROUTPUT ON;
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := test_out(b);
DBMS_OUTPUT.PUT_LINE(a || ', ' || b);
END;
/
Выходы 2, 1
Однако, пытаясь сделать то же самое в SQL (создание связать переменную с помощью SQL-разработчика Oracle):
VARIABLE a NUMBER;
SELECT test_out(:a) FROM DUAL;
PRINT a;
дает вам исключение:
SQL Error: ORA-06572: Function TEST_OUT has out arguments
06572. 00000 - "Function %s has out arguments"
*Cause: A SQL statement references either a packaged, or a stand-alone,
PL/SQL function that contains an OUT parameter in its argument
list. PL/SQL functions referenced by SQL statements must not
contain the OUT parameter.
*Action: Recreate the PL/SQL function without the OUT parameter in the
argument list.
функции, по определению, не поддерживают выходные параметры. Если вы посмотрите на документацию о функциях, упомянутых в цитированном источнике, вы увидите, что спецификация всех из них НЕ включает «выходной параметр» - в отличие от возвращаемого значения. Я даже не вижу ничего в PL/SQL-ссылке, чтобы указать, что PL/SQL-функция может делать что-то другое. И посмотрите на документ о CREATE FUNCTION. Та же история. – EdStevens
Чтобы разработать ответ Эд: В PL/SQL вы можете выполнять некоторые значения обработки и вывода через параметры, но такая программа называется процедурой, а не функцией. Такая терминология может использоваться несколько иначе в других языках, но это использование Oracle. – mathguy
@EdStevens функции ** делать ** Поддержка из параметров: 'CREATE FUNCTION test_out ( значение OUT NUMBER ) RETURN NUMBER IS НАЧАТЬ значение: = 1; RETURN 2; END; /'тогда вы можете сделать' DECLARE a NUMBER; b НОМЕР; BEGIN a: = test_out (b); DBMS_OUTPUT.PUT_LINE (a || ',' || b); END; /' – MT0