Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ SQL の使用法 » SQL のダイアレクトと互換性

 

Transact-SQL プロシージャでのエラー処理

デフォルトでのプロシージャのエラー処理は、Watcom SQL と Transact-SQL とでは違います。Watcom SQL のデフォルトでは、エラーが起こった場合にプロシージャは終了し、呼び出した環境に SQLSTATE 値と SQLCODE 値を返します。

EXCEPTION 文を使って、Watcom SQL ストアドプロシージャに明示的なエラー処理を組み込むことができます。または、ON EXCEPTION RESUME 文を使って、エラーが起こった次の文から実行を再開するよう、プロシージャに指示することもできます。

Transact-SQL のプロシージャでエラーが起こった場合は、次の文から実行が継続されます。最後に実行された文のエラーステータスは、グローバル変数 @@error に保存されます。文の後ろにあるこの変数をチェックして、プロシージャから強制的に返すことができます。たとえば、次の文は、エラーが起こると終了させます。

IF @@error != 0 RETURN

プロシージャが実行を終了したときの戻り値で、プロシージャが成功したかどうかがわかります。この戻り値は整数で、次のように指定してアクセスできます。

DECLARE @Status INT
EXECUTE @Status = proc_sample
IF @Status = 0
   PRINT 'procedure succeeded'
ELSE
   PRINT 'procedure failed'

次のテーブルは、組み込みプロシージャの戻り値とその意味を示します。

定義 SQL Anywhere SQLSTATE
0 プロシージャはエラーを起こすことなく実行された
-1 オブジェクトが見つからない 42W33、52W02、52003、52W07、42W05
-2 データ型エラー 53018
-3 プロセスはデッドロックの対象となった 40001、40W06
-4 パーミッションエラー 42501
-5 構文エラー 42W04
-6 その他のユーザエラー
-7 リソースエラー、たとえば領域が足りない 08W26
-10 致命的な内部の矛盾 40W01
-11 致命的な内部の矛盾 40000
-13 データベースが壊れている WI004
-14 ハードウェアエラー 08W17、40W03、40W04

SQL Anywhere SQLSTATE が該当しない場合、デフォルト値の -6 が返されます。

RETURN 文は、この表の値以外の、ユーザが意味を定義した整数値を返すこともできます。


RAISERROR 文を使用するプロシージャ
Watcom SQL での Transact-SQL のようなエラー処理