Sybase IQ數據庫中,有兩種異常信息,一種是警告warning、一種是錯誤error。
在存儲過程中,對這兩種異常信息做了不同的處理
1)在發生告警信息的時候,IQ會繼續執行。
2)在發生error時,IQ提供了兩種處理方式:
第一種是默認方式,在默認方式下,數據庫會將錯誤發生的SQLSTATE、SQLCODE返回到調用存儲過程的環境中,比如說你調用存儲過程所使用的客戶端
第二種是在創建SP的時候,可以指定,ON EXCEPTION RESUME 子句。如下:
CREATE PROCEDURE dba.sp_name()
ON EXCEPTION RESUME
使用ON EXCEPTION RESUME子句,過程會根據 ON_TSQL_ERROR 選項的設置采取不同的操作。如果 ON_TSQL_ERROR 設置為CONDITIONAL (缺省設置),則當下一條語句處理錯誤時,將繼續執行下面的語句;否則將退出。
我寫了一個簡單的過程來測試的:
Java代碼
CREATE PROCEDURE "DBA"."OuterProc"() ON EXCEPTION RESUME
BEGIN
declare command_test exception for SQLSTATE '52003';
MESSAGE 'Hello from OuterProc.' TO CLIENT;
signal command_test; --模擬錯誤消息
if SQLSTATE=52003 then MESSAGE 'Hello from OuterProc.' TO CLIENT
end if;
END
Java代碼
CALL OuterProc();
結果輸出為:
Java代碼
Hello from OuterProc.
Hello from OuterProc.
若將if 處理語句去掉,則會顯示出錯。
在IQ中,處理語句還包括:
• IF
• SELECT @variable =
• CASE
• LOOP
• LEAVE
• CONTINUE
• CALL
• EXECUTE
• SIGNAL
• RESIGNAL
• DECLARE
• SET VARIABLE
作者“yangyoupeng-cn-fujitsu-com”