我希望以下代码在返回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;
答案 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;