デフォルトでのプロシージャのエラー処理は、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 のようなエラー処理
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |