Oracle:即使 SERVEROUTPUT 变量设置为 ON 也不显示输出

Nap*_*Nap 3 oracle plsql

我想知道为什么即使我将 SERVEROUPUT 变量设置为 ON 也不显示输出。

我有以下匿名块代码:

DECLARE
    v_rec_count number:=0;
BEGIN
    for rec in (SELECT T_A.ROWID, T_A.OPEN_COUNT, T_B.OPEN_COUNT as NEW_OPEN_COUNT
            FROM T_A
            INNER JOIN T_B ON
                T_A.KEYA = T_B.KEYA
            AND T_A.KEYB = T_B.KEYB
            AND T_A.OPEN_COUNT <> T_B.OPEN_COUNT) 
    loop
        v_rec_count := v_rec_count + 1;

        update T_A t1
        set t1.OPEN_COUNT = rec.NEW_OPEN_COUNT,
            t1.UPD_USER_ID = 'batch',
            t1.UPD_DATE = SYSDATE
        where t1.rowid = rec.rowid;
    end loop;

    dbms_output.put_line ('T_A UPDATE_TOTAL: ' || v_rec_count);
END;
/
Run Code Online (Sandbox Code Playgroud)

当我执行以下代码时,当我通过 sqlplus 运行 sql 文件时,我希望看到 dbms_output.put_line 的输出到 sql 提示符并最终看到日志文件。该块所做的输出只是“PL/SQL 过程已成功运行”。

我已经在块之前设置了 SET SERVEROUPUT ON 但它不起作用。有任何想法吗?

Phi*_*lᵀᴹ 11

从下面的输出中可以看出,一个测试匿名 PL/SQL 块按预期在 SQL Plus 中工作:

[oracle@node1 ~]$ sqlplus phil/phil

SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 1 21:55:35 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set serveroutput on
SQL> DECLARE
  2      v_rec_count number;
  3  BEGIN
  4      select count(*) into v_rec_count from dual;
  5      dbms_output.put_line ('count: ' || v_rec_count);
  6  END;
  7  /
count: 1

PL/SQL procedure successfully completed.

SQL>
Run Code Online (Sandbox Code Playgroud)

我猜您没有使用 SQL Plus 进行测试,而是在其他工具(例如 SQL Developer)中进行测试,并且未设置DBMS_OUTPUT.enable() 您尚未配置该工具以正确显示 RDBMS 的输出。

或者,这可能SET SERVEROUPUT ON是一个错字的事实:)