下午的時候在 PL/SQl Developer 10.0.5.1710 上調試壹個存儲過程,在調試的時候使用了比較多的 DBMS_OUTPUT.PUT_LINE 做爲打印日誌的方式,結果沒過多久 PLSQL 客戶端就開始提示以下錯誤:ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes,分析下來是由於函數DBMS_OUTPUT.PUT_LINE()是在循環體中打印結果的,所以,循環執行多少次,這個函數就會執行多少次,致使緩衝區很快爆滿。具體的錯誤信息以下圖所示。 sql
因而果斷 Google 了關鍵字"ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes",查詢結果的前兩條就是來自 Oracle Forum 論壇的解決方法。兩個連接分別是https://community.oracle.com/message/977489 和 https://community.oracle.com/thread/308557 ,解決的方法也很簡單,就是在咱們的存儲過程的方法體開始的時候增長以下內容:DBMS_OUTPUT.ENABLE(1000000); 使輸出的緩衝區的容量達到壹千萬個字節,這樣就不怕它的容量爆表了。具體的參考代碼以下所示: oracle
CREATE OR REPLACE PROCEDURE SAMPLE_PROC IS --各類臨時變量和遊標的定義 CURSOR CURSOR_SAMPLE IS SELECT ... FROM TABLE_NAME WHERE ...; BEGIN --方法體從這裏開始 DBMS_OUTPUT.ENABLE(1000000); FOR I IN CURSOR_SAMPLE LOOP --輸出語句樣例 DBMS_OUTPUT.PUT_LINE(...); END LOOP; --其它內容 END; /若是是在命令行下編寫存儲過程,能夠直接使用語句 SET SERVEROUTPUT ON size '1000000'; 來設置緩衝區的最大容量。