首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle vs SQL Server 存儲過程調試與錯誤處理對比:PL/SQL Developer 斷點 vs PRINT/INSERT 變通法

     編輯:Oracle 資料庫相關知識

Oracle 調試:PL/SQL Developer (推薦)

  1. 右鍵過程 → Add Debug Information (編譯帶調試符號)。
  2. 右鍵 → Test → 彈出測試窗口。
  3. 下方參數面板填入 IN/INOUT 參數值 (無需引號),OUT 參數留空。
  4. 工具欄 Start Debugger (F9) → 單步 Step Into (F11) / Step Over (F10)。
  5. 下方 Variables / Call Stack 窗口實時查看變量值。

SQL Server 調試:無成熟第三方工具,常用變通法

1. 臨時表記錄中間變量

CREATE TABLE #Debug (Step VARCHAR(50), Val SQL_VARIANT, Ts DATETIME DEFAULT GETDATE());
INSERT INTO #Debug SELECT 'BeforeCalc', @Var1;
-- ... 邏輯 ...
INSERT INTO #Debug SELECT 'AfterCalc', @Var1;
SELECT * FROM #Debug;

2. 動態 SQL + PRINT 輸出

DECLARE @Sql NVARCHAR(MAX), @Msg NVARCHAR(MAX);
SET @Sql = N'UPDATE t SET c = ' + QUOTENAME(@Val, '''') + ' WHERE id = ' + CAST(@Id AS VARCHAR);
PRINT @Sql;  -- 查看生成的 SQL
EXEC sp_executesql @Sql;

類型轉換:PRINT CONVERT(VARCHAR(20), @IntVar)、PRINT CONVERT(VARCHAR(23), @DateTimeVar, 121)。

錯誤處理對比

場景Oracle (PL/SQL)SQL Server (T-SQL)
自定義錯誤碼返回OUT 參數 p_err_code NUMBER + p_err_msg VARCHAR2返回值 RETURN @err_code 或 OUTPUT 參數
嚴重錯誤中止RAISE_APPLICATION_ERROR(-20001, 'msg');RAISERROR('msg', 16, 1); RETURN;
異常捕獲EXCEPTION WHEN OTHERS THEN ...BEGIN TRY ... END TRY BEGIN CATCH ... END CATCH
全局錯誤變量SQLCODE, SQLERRM@@ERROR (語句級), ERROR_NUMBER() (CATCH 內)
事務控制隱式事務,COMMIT/ROLLBACK 顯式隱式事務,SET XACT_ABORT ON 建議

最佳實踐建議

  • Oracle:統一錯誤處理包 ERR_PKG,封裝 LOG_ERROR、RAISE_BIZ_EXCEPTION。
  • SQL Server:存儲過程模板包含 TRY/CATCH、XACT_ABORT、參數驗證、統一返回碼結構。
  • 兩者皆應避免在循環中提交,保持事務原子性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved