程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 關於Oracle和SQL存儲調試和出錯處理

關於Oracle和SQL存儲調試和出錯處理

編輯:Oracle數據庫基礎

在大型數據庫中,因為開發的需要,經常需要調用Procedure。在Oracle和SQLServer上開發Procedure因為語法不同,而有所區別;調試Procedure,在兩個系統上都不太容易,尤其是進行錯誤處理時更是如此。

調試:

1. 對於Oracle的調試,可以借助於第三方的工具,比如Pl/SQL Developer,以6.0.5.926版本為例,首先對該Procedure右鍵處理,添加“add debug information”,然後選擇“test”,打開新的測試窗口,在下方對應的輸入輸出變量處,添加相應的測試數據。注意:這裡的數據輸入,不需要引號,輸出參數不需要輸入!

然後點擊“start debugger”,或者按F9進行測試,可以選擇測試的步驟如“step into”等,然後可以在下面的script窗口看到中間變量。

2. 對於SQLServer調試,在沒有找到較好的第三方工具的情況下,目前采用的是將中間的變量值或者SQL語句插入到另一個表中,或者直接print出來的方式。第一種需要借助 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 +')')

在print中,需要注意類型的轉換,一般是借用 convert(varchar(11),@spNOTo) 方法來實現,否則會提示類型轉換錯誤。

3. 錯誤處理上,對於SQLServer可以采用開始自定義變量,然後根據不同判斷,改變該值再推出的方法來處理,見下例:

  

  set @exec_num=0

  if (@spNOFrom=0 or @spNOTo=0 or @reuseUser=NULL)

  begin

  set @exec_num=1

  goto the_end

  end

  the_end:

  return

或者是這種:

  

  set nocount on

  if (@property is null) or (@property = '')

  begin

  raiserror('Must specify a property name.',-1,-1)

  return (1)

  end

或者是對該錯誤全局變量 @@error 數值的判斷上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved