dbms_output.put_line在函数内部不起作用

时间:2018-01-08 14:09:49

标签: sql oracle plsql

我希望以下代码在返回1之前打印'abc'。

即使我运行set serveroutput on,它仍然不会打印任何内容。

如果它不是一个函数,那么它就是一个过程,它会起作用。

有人可以向我解释我做错了吗?

感谢。

CREATE OR REPLACE FUNCTION test (
    code NUMBER
) RETURN NUMBER
    IS
BEGIN
    dbms_output.put_line('abc');
    RETURN 1;
END;

SELECT
    test(30)
FROM
    dual;

2 个答案:

答案 0 :(得分:3)

如果您使用的是SQL Developer,则应添加

  

SET SERVEROUTPUT ON

在调用函数之前。

然后,使用F5(运行脚本)而不是F9(运行语句)执行该功能。这两种执行句子的模式之间的差异是显示结果的模式。 F5将结果显示为PLSQL代码 F9将结果显示为SQL代码。这样,您将只看到SQL的结果。

以下是使用F5模式的输出:

  

TEST(30)

     1
     

ABC

另外,你应该将select语句包含在PL_SQL匿名块中。

答案 1 :(得分:0)

执行SQL语句并不总是刷新DBMS_OUTPUT缓冲区;这将部分取决于执行环境/工具。

如果您将查询放在块中,您可能非常确定会看到输出:

DECLARE
   i NUMBER;
BEGIN
   SELECT test(30) INTO i
     FROM dual;
END;