2012-01-06 12 views
1

データベースで何かをするためにバッチMySQLスクリプトを実装したいと思います。問題は、私が持っている各マスタIDに対して、4つのタプルを挿入したいということです。しかし、このタプルはトランザクションに追加する必要があります。つまり、これらの4つのタプルのいずれかが失敗した場合、トランザクションはロールバックされます。次に、クエリが失敗したことをキャプチャするためのメカニズムをいくつかキャッチする必要があります。 PHPやPERLなどの純粋なMYSQLを使用することはできません。私はそれを行うストアプロシージャを作成することはできません。 Microsoft SQL Serverには、私の問題を解決する@@ error変数がありますが、MYSQLではエラーコードを示すシステム変数はありません。 どうすればいいですか?MYSQLのキャッチエラー

乾杯、

+0

トランザクションをロールバックするためにキャッチしたい – Nami

+0

PHPラッパーで 'バッチMYSQL'スクリプトをラップできないのはなぜですか?次に、try/catchをロールバック/コミットで使用できます。 –

答えて

0

これは醜い回避策ですが、のいずれかの場合、私はロールバックすることができるように私は、SQLクエリのバッチをインポートし、トランザクション内で全体の事をラップしようとしていたとき、それは私のために働きましたSQLクエリがエラーを起こしました。

バッチのサイズが大量だったため、条件ハンドラを持つSQLプロシージャもオプションではありませんでした。

あなたはこの手動をしなければならないので、あなたは、バッチ処理されない限り、それは本当に解決策ではありません。

まず、あなたの全体のバッチがSQLファイルに保存されていることを確認します。 SQLファイルにはバッチ・クエリーのみが含まれ、トランザクション制御クエリーは含まれません。

そして、MySQLのコマンドラインクライアントを起動し、トランザクションコマンドを手動で入力します。あなたは、単にできることをした後

mysql> SOURCE path/to/file.sql 

mysql> SET AUTOCOMMIT = 0; 
mysql> START TRANSACTION; 

が続いてバッチファイルを実行するためのコマンドラインクライアントを伝えます手動でCOMMIT;またはROLLBACK;を入力してください。

このようなクルージングですが、誰でもより良いアプローチがありますか?

関連する問題