タグ付けされた質問 「error-handling」

4
SQLスクリプトの実行を中断する方法
私はSQLスクリプトに取り組んでおり、いくつかの条件が満たされない場合、スクリプトの継続を停止する必要があります。 GoogleでGoogleを検索したところ、重大度が20のRaisErrorが終了することがわかりました。しかし、いくつかの理由で、私はそのオプションを使用できません。 SQLスクリプトの実行を停止する可能な代替手段を教えてください。

2
Oracle PL / SQLには標準のASSERTルーチンがありますか?
私は、他の言語で見られるものと機能的に類似したASSERTルーチンを使用したいと思います。つまり、コンストラクト(プロシージャ、構文など)です。 ASSERT( <condition>, <msg>) その<condition>ため、最初の引数で渡された値がfalseの場合、指定された<msg>説明メッセージで例外が発生します。 これは手で行うのは簡単ですが、DBMSで提供される標準的なものがあるかどうかを尋ねています。 自分で作成したり、サードパーティのパッケージからインポートしたりすることは、作業中のすべてのプロジェクトに対して完全に移植可能で透過的である必要があるため、実用的ではありません。

1
コンテキストで例外を生成する
PostgreSQLが例外をスローすると、次のような行「CONTEXT」があります。 ERROR: INSERT has more target COLUMNS than expressions LINE 3: ... ^ QUERY: INSERT INTO ... CONTEXT: PL/pgSQL FUNCTION "XXXXX" line 4 at SQL statement しかし、例外をスローすると、この行はありません。追加する方法が見つかりませんでした。 RAISE EXCEPTION 'blablabla' USING HINT = 'blablablabla'; この行を例外に追加することはできますか?

3
SQL ServerのERROR_STATE()とは何ですか?
私は読み取りERROR_STATE()エラーの同じタイプが発生する可能性がソースコードにおける異なる状態/位置を区別するために缶の助けを。しかし、それがどのように役立つかは、私にははっきりしていません。 MSDNの状態: ERROR_STATE() TRY…CATCHコンストラクトのCATCHブロックが実行される原因となったエラーの状態番号を返します。 実際にどのように使用できますか?誰かが私に例を示すことができますか?このリファレンス記事で提供されているものは本当に私に物事をうまく説明するのに役立ちませんか?

2
PL / pgSQLで手動で発生した例外の例外コンテキストを取得するにはどうすればよいですか?
Postgresでは、次のコードを使用して例外の「スタックトレース」を取得します。 EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT; これは「自然な」例外では問題なく機能しますが、 RAISE EXCEPTION 'This is an error!'; ...その後、スタックトレースはありません。メーリングリストのエントリによると、これは意図的なものである可能性がありますが、私の人生では理由を理解することはできません。を使用する以外の例外をスローする別の方法を理解したいと思いRAISEます。私は明らかな何かを見逃しているだけですか?誰かがこれのためのトリックを持っていますか?私の選択した文字列を含むPostgresをスローできる例外はありますか?そのため、エラーメッセージで私の文字列だけでなく、完全なスタックトレースも取得しますか? ここに完全な例があります: CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$ DECLARE v_error_stack text; BEGIN -- Comment this out to see how a "normal" exception will give you the stack trace RAISE …

3
動的SQLバックアップコマンドにtry / catchを使用するときにエラーの詳細をログに記録する方法
try catchと動的SQLを使用するストアドプロシージャ内でバックアップコマンドを発行する場合、バックアップコマンドを直接実行する場合と比較すると、エラーメッセージは非常に一般的です。 SP内で試行/キャッチ: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch 結果 50000:usp_Backup:117:BACKUP DATABASEが異常終了しています。 rawコマンドを発行するwheareas: backup DATABASE someDb to disk... より詳細な結果: ルックアップエラー-SQL Serverデータベースエラー:ファイル "H:\ FolderName \ Filename.bak:" 112で回復不可能なI / Oエラーが発生しました(ディスクに十分なスペースがありません。) これらの詳細をストアドプロシージャ内の変数にキャッチする方法はありますか(ログを記録し、呼び出し元にパスバックし、ロジックを再試行します)?詳細はメッセージチャネルで送信されているようですが、SP内で利用できるようにしたいと思います。

2
SQLサーバーのバッチ中止エラーのリスト
SQL Serverでは、XACT_ABORTがオフの場合、いくつかのエラーが現在のステートメントを終了し(たとえば、一部のパラメーターを受け取るストアドプロシージャに不正なパラメーターの数を指定)、一部のエラーはバッチ全体を中止します(たとえば、ストアにパラメーターを指定します)パラメータを取らない手続き)。[参照]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 私が知りたいのは、どのエラーがバッチアボートであり、どのエラーがステートメントの終了であるかの明確なリストがあるかどうかです。

2
一意の列に値が存在するかどうかをチェックすることの長所と短所、または挿入時にdbに一意のエラーを発生させる
先日クエリを書いていると、思いが浮かんできてしまいました。 最初に一意の列の値が存在するかどうかを確認し、次に挿入するか挿入して、dbに一意の制約エラーを発生させますか?それは重要ですか? 編集:この問題はデータベースに依存するという回答で以下に示すように、タグpostgresqlを追加しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.