在日常開發中,偶爾會遇到明明已經執行了 INSERT 語句,卻在另一個會話或工具中查不到數據的情況。最近就經歷了一次典型的「自動提交」陷阱,記錄下來以供參考。
編寫測試程序插入數據後,應用層報錯找不到記錄;下載最新 ODBC 驅動嘗試連接,問題依舊;甚至直接用 SQL*Plus 查詢,結果集也是空的。乍一看像是權限、連接池或事務隔離級別的問題,花了好幾個小時在網絡、驅動、權限上反複排查,均無果。
後來發現罪魁禍首是 PL/SQL Developer 默認關閉了自動提交。在該工具中執行 DML 語句後,數據僅停留在當前會話的事務中,必須手動點擊「提交」按鈕、執行 COMMIT 命令,或者關閉 SQL Window 窗口時選擇提交,數據才會真正持久化到數據庫,對其他會話可見。這個設置隱藏得很深,初次使用極易踩坑。
在 PL/SQL Developer 中依次打開 Tools → Preferences → Transaction,勾選 Auto Commit 選項,重新執行插入與查詢,一切恢復正常。

COMMIT 的習慣,減少對工具默認行為的依賴。