2016-06-29 2 views
0

В Oracle SQL выполните ли какие-либо из системных функций (перечисленные на http://docs.oracle.com/database/121/SQLRF/functions001.htm) параметры выходного сигнала, или они только возвращают значение?Поддерживает ли Oracle SQL выходные параметры в системных функциях?

Я знаю, что в Oracle PL/SQL функция может возвращать значения и может содержать выходные параметры, но какие-либо функции SQL-системы имеют выходные параметры?

+0

функции, по определению, не поддерживают выходные параметры. Если вы посмотрите на документацию о функциях, упомянутых в цитированном источнике, вы увидите, что спецификация всех из них НЕ включает «выходной параметр» - в отличие от возвращаемого значения. Я даже не вижу ничего в PL/SQL-ссылке, чтобы указать, что PL/SQL-функция может делать что-то другое. И посмотрите на документ о CREATE FUNCTION. Та же история. – EdStevens

+0

Чтобы разработать ответ Эд: В PL/SQL вы можете выполнять некоторые значения обработки и вывода через параметры, но такая программа называется процедурой, а не функцией. Такая терминология может использоваться несколько иначе в других языках, но это использование Oracle. – mathguy

+1

@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

ответ

1

[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. 
Смежные вопросы