Sql dbms_output.put_行在函数内部不工作
我希望以下代码在返回1之前打印“abc” 即使我运行了setserveroutput,它仍然不会打印任何内容 如果它不是一个函数,而是一个过程,那么它就会工作 有人能解释一下我做错了什么吗 谢谢Sql dbms_output.put_行在函数内部不工作,sql,oracle,plsql,Sql,Oracle,Plsql,我希望以下代码在返回1之前打印“abc” 即使我运行了setserveroutput,它仍然不会打印任何内容 如果它不是一个函数,而是一个过程,那么它就会工作 有人能解释一下我做错了什么吗 谢谢 CREATE OR REPLACE FUNCTION test ( code NUMBER ) RETURN NUMBER IS BEGIN dbms_output.put_line('abc'); RETURN 1; END; SELECT test(30)
CREATE OR REPLACE FUNCTION test (
code NUMBER
) RETURN NUMBER
IS
BEGIN
dbms_output.put_line('abc');
RETURN 1;
END;
SELECT
test(30)
FROM
dual;
如果您使用的是SQL Developer,那么应该添加 将服务器输出设置为ON 在调用函数之前 然后,使用F5运行脚本而不是F9Run语句执行函数。这两种执行句子的方式的区别在于结果的显示方式。 F5将结果显示为PLSQL代码 F9将结果显示为SQL代码。这样,您将只看到SQL的结果 以下是使用F5模式的输出: 测试30 abc
另一方面,您应该将select语句包含到PL_SQL匿名块中。执行SQL语句并不总是刷新DBMS_输出缓冲区;这部分取决于执行环境/工具 如果将查询放入块中,您可以非常肯定地看到输出,如中所示:
DECLARE
i NUMBER;
BEGIN
SELECT test(30) INTO i
FROM dual;
END;
一般的答案是使用DBMS_OUTPUT.PUT_行。您有什么商业理由来执行此操作?在生产代码中几乎不需要这样做。您使用的是哪个客户端?您是如何执行查询的?如果它是SQL*Plus或SQL Developer,并且您将其作为脚本运行,那么它应该可以正常工作。如果您以语句的形式运行查询,那么函数返回值会出现在“查询结果”窗口中,您是否从“视图”菜单打开了“Dbms输出”窗口?在运行commit之后,您看到abc消息了吗?在SQL*Plus和PL/sqldeveloper中适用于我。
DECLARE
i NUMBER;
BEGIN
SELECT test(30) INTO i
FROM dual;
END;