デフォルトでのプロシージャのエラー処理は、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 のようなエラー処理
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |