MySQLストアドプロシージャで例外ハンドラを定義できますが、ハンドラの例外メッセージをキャッチしてデバッグ目的のテーブルにログを書き込めないようです。私はちょうどMySQLのストアプロシージャで例外コードとメッセージをログに記録するメソッドがあることを知りたいですか?MySQLストアドプロシージャの例外情報をログに記録する
1
A
答えて
1
メッセージをキャッチすることはできませんが、エラーコードをキャッチすることはできます。ここで
は、「重複したエントリ」(PK、英国の制約)に対処するための一例である:
CREATE PROCEDURE sp_do_insert(
IN in_param1 int,
IN in_param2 int,
OUT out_status tinyint
)
BEGIN
DECLARE CONTINUE HANDLER FOR 1062 SET out_status = 1;
SET out_status = 0;
INSERT INTO tbl(field1, fiel2)
VALUES (in_param1, in_param2);
END;
tbl
はフィールド1に、英国の制約があり、もう一度、あなたが得ることはありません、既存の値を挿入しようとした場合エラー。何も挿入されず、ステータスは1に等しくなります。
他のエラーコード用に別のハンドラを追加することもできます。そして、あなたはout_statusの値のために何がエラーであるかを常に知っていて、error_code(ハンドラ内)のために "エラーメッセージ"を知っているでしょう。
の場合は、show warnings
(これは最後のクエリのエラー/警告を表示します)を試すことができます。
希望します。
0
あなたは5.6.4
で、GET DIAGNOSTICSステートメントで、メッセージ、エラーコード、SQL状態を、...キャッチすることができますが、私はどのようなチュートリアル覚えていない http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html
0
を参照してください。私はこれをコピーしました。しかし、5.6より前のバージョンのMySQLでは非常に役に立ちました。私はこれを誰からも教えてくれてありがとう!
手順1:debug_logテーブルを作成します。これは、あなたの書き込みのすべてを保持します。
CREATE TABLE `debug_log` ( `debug_log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `msg` varchar(512) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`debug_log_id`) ) ENGINE=MyISAM
手順2:debug_logテーブルに情報を追加するためのストアドプロシージャを作成します。
DELIMITER $$ USE `your_db_name_here`$$ DROP PROCEDURE IF EXISTS `log_debug`$$ CREATE DEFINER=`ss7admin`@`%` PROCEDURE `log_debug`(IN lastMsg VARCHAR(512)) BEGIN INSERT INTO debug_log (msg) VALUES (lastMsg); END$$ DELIMITER ;
手順3:実際のストアドプロシージャにハンドラを追加します。
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN CALL log_debug( CONCAT ( now(), ' : Something went horribly wrong!', '.' ) ); CALL log_debug('Exiting now'); SET outReturnCode = 1; END;
関連する問題
- 1. Javaでより優れた例外情報をログに記録する
- 2. プログラムでElmahでエラーをログに記録する:特定の情報をログに記録する
- 3. SpringのSimpleMappingExceptionResolverの例外スタックトレースをログに記録する方法
- 4. ReharperでユニットテストプロジェクトからNHibernate情報をログに記録
- 5. Rubyで自動的に例外をログに記録する
- 6. 「キャッチされた」例外をログに記録する方法は?
- 7. エラー/例外をログに記録する対象者
- 8. すべての例外とログ情報を取得する
- 9. マルチキャストOnExceptionAspectはバブル例外をログに記録しています
- 10. NServiceBus例外がINFOメッセージとしてログに記録される
- 11. 例外をログに記録しないElmah
- 12. Xcode 4:例外がコンソールにログに記録されない
- 13. リソースが不足してログに記録できない例外
- 14. 例外ログ記録および電子メールの送信
- 15. チェーンされた例外をログに記録するのはいつですか?
- 16. grailsで例外をスローしないでstackTraceをログに記録する方法
- 17. Spring MVCがすべての例外をログに記録しない
- 18. 例外を引き起こし、カスタム情報を追加するソース行を記録する方法は?
- 19. ノーバインディング操作情報例外
- 20. MySQL差分をログに記録する方法
- 21. セロリタスクのキューにログを記録する
- 22. ユーザーアクティビティをログに記録
- 23. ユーザーアクティビティをログに記録するには
- 24. PreparedStatementをログに記録するには?
- 25. 特定のクラスのログ情報を特定のファイルに記録する方法は?
- 26. Python/Django:リクエスト情報を含む例外が発生したときに自動的にログを記録します
- 27. セキュリティ情報やスタックトレースを漏らさずにエラーをログに記録する方法は?
- 28. SQLスクリプトエラーをログに記録する
- 29. Authlogic。ログアウトタイムアウトをログに記録する
- 30. ログに記録されたユーザーと情報を保存する場所はどこですか