在Oracle SQL中,是否有任何系统函数(在http://docs.oracle.com/database/121/SQLRF/functions001.htm上列出)支持输出参数,或者它们只返回一个值?
我知道在Oracle PL / SQL中,函数可以返回值并且可以包含输出参数,但是任何SQL系统函数本身都有输出参数吗?
答案 0 :(得分:1)
[TL; DR] 带有out参数的函数只能在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中做同样的事情(通过Oracle的SQL Developer创建一个绑定变量):
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.