正常情况下,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. |