Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql dbms_output.put_行在函数内部不工作_Sql_Oracle_Plsql - Fatal编程技术网

Sql dbms_output.put_行在函数内部不工作

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)

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