在 PL/SQL Developer 中執行 PL/SQL 程式塊或查詢大量文本資料時,彈出錯誤對話框:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small

PL/SQL Developer 內部為變數輸出、DBMS_OUTPUT 緩衝區、查詢結果顯示分配了固定大小的緩衝區。當實際資料長度超過預設緩衝區大小(通常為 32767 字節或更小)時觸發此錯誤。

雖然調整工具設定可解決顯示問題,但生產環境 PL/SQL 代碼仍應做好防禦:
-- 1. 明確宣告足夠大小的變數 DECLARE v_large_text VARCHAR2(32767); -- 最大 32767 位元組 v_clob CLOB; -- 超過 32K 必須用 CLOB BEGIN -- 處理邏輯 END; -- 2. DBMS_OUTPUT 啟用足夠緩衝區 BEGIN DBMS_OUTPUT.ENABLE(1000000); -- 設定 1MB 緩衝區 -- 後續 DBMS_OUTPUT.PUT_LINE 才不會溢位 END; -- 3. 字符串拼接注意長度檢查 v_result := v_result || v_new_part; IF LENGTHB(v_result) > 32767 THEN -- 處理超長邏輯,如寫入 CLOB 或分段處理 END IF;
| 場景 | 說明 | 建議處理 |
|---|---|---|
| 查詢 CLOB/大文本欄位 | 結果集顯示超過工具緩衝區 | 調整工具 Buffer Size、或用 SUBSTR 截取預覽 |
| DBMS_OUTPUT 大量輸出 | 未啟用足夠緩衝區 | 程式碼開頭加 DBMS_OUTPUT.ENABLE(1000000) |
| 動態 SQL 拼接長字符串 | VARCHAR2 變數超過 32767 限制 | 改用 CLOB 型別或分段處理 |
| 匯出/匯入腳本生成 | 生成的 DDL/DML 過長 | 分檔案輸出、使用 CLOB 變數 |