Oracle SQL是否支持系统函数中的输出参数?

时间:2016-06-29 21:26:41

标签: sql oracle

在Oracle SQL中,是否有任何系统函数(在http://docs.oracle.com/database/121/SQLRF/functions001.htm上列出)支持输出参数,或者它们只返回一个值?

我知道在Oracle PL / SQL中,函数可以返回值并且可以包含输出参数,但是任何SQL系统函数本身都有输出参数吗?

1 个答案:

答案 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.