首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 與 SQL Server 預存過程調試與錯誤處理實戰指南

     編輯:Oracle 資料庫基礎

調試篇

1. Oracle:借助 PL/SQL Developer

  1. 右鍵存儲過程 → Add Debug Information。
  2. 選擇 Test,打開測試窗口,在輸入/輸出變量區填入測試值(無需引號,輸出參數留空)。
  3. 點擊 Start Debugger 或 F9,可用 Step Into 等單步執行,下方 Script 窗口即時顯示中間變量。

2. SQL Server:無成熟第三方工具時的替代方案

方案 A:將中間值/SQL 插入臨時表,需動態拼接 EXEC('...'),注意變量拼接寫法:

EXEC('UPDATE SupplyplanLack SET Completedate = GetDate()
FROM supplyPlanLack a
WHERE ' + @ssTmp + ' AND ' + @iCompleteQty + ' >= (
    SELECT s.RequestQty * a.RationQty AS ReQQty
    FROM Balance a, SupplyPlan s
    WHERE a.Vehicle = s.Vehicle
      AND a.Part = s.Part
      AND a.SupplyPlanNo = s.SupplyPlanNo
      AND ' + @ssTmp + ')')

方案 B:PRINT 輸出,必須先轉字符型,否則報類型轉換錯誤:

PRINT CONVERT(VARCHAR(11), @spNOTo)

錯誤處理篇

SQL Server 常用模式

模式 1:自定義返回碼 + GOTO

SET @exec_num = 0
IF (@spNOFrom = 0 OR @spNOTo = 0 OR @reuseUser IS NULL)
BEGIN
    SET @exec_num = 1
    GOTO the_end
END
the_end:
RETURN

模式 2:RAISERROR 即時終止

SET NOCOUNT ON
IF (@property IS NULL) OR (@property = '')
BEGIN
    RAISERROR('Must specify a property name.', -1, -1)
    RETURN (1)
END

模式 3:檢查 @@ERROR 全局變量,在關鍵語句後立即判斷,非零則回滾/返回。

小結

Oracle 有成熟 GUI 調試器,體驗較好;SQL Server 多依賴「臨時表記錄法」與「PRINT 大法」。錯誤處理上,SQL Server 推薦 RAISERROR 配合 TRY...CATCH(SQL 2005+),舊版本用 @@ERROR 捕獲;Oracle 則用 EXCEPTION 區塊統一處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved