正常情況下,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_OUTPUTB包輸出的一行都是不可見字符,那么這行內容被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.