DBMS_OUTPUT包无法输出空行

正常情况下,DBMS_OUTPUT包无法直接输出一个空行。
以前还真没有注意这个问题,前两天想在输出结果的时候进行一下简单的格式化,发现了这个问题:

SQL> SET serverout ON
SQL> BEGIN
2 dbms_output.put_line('a');
3 dbms_output.put_line(' ');
4 dbms_output.put_line('b');
5 dbms_output.new_line; 
6 dbms_output.put_line('c');
7 END;
8 /
a
b
c
PL/SQL PROCEDURE successfully completed.

导致问题的原因在于,如果使用DBMS_OUTPUT包输出的一行都是不可见字符,那么这行内容被DBMS_OUTPUT包忽略掉。
虽然DBMS_OUTPUT包本身并没有提供开关来屏蔽这个属性,不过这个问题依然很容易解决,最简单的方法莫过于直接把回车包含在字符串中:

SQL> BEGIN
2 dbms_output.put_line('a
3 
4 b');
5 dbms_output.put_line('
6 c');
7 END;
8 /
a
b
c
PL/SQL PROCEDURE successfully completed.

当然这种方法有可能导致PL/SQL代码的可读性变差,也容易影响代码的缩进格式,此外还有一种方式:

SQL> BEGIN
2 dbms_output.put_line('a' || chr(10) || chr(13));
3 dbms_output.put_line('b');
4 dbms_output.put_line(chr(10) || chr(13) || 'c');
5 END;
6 /
a
b
c
PL/SQL PROCEDURE successfully completed.
This entry was posted in ORACLE and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *