2016-09-12 6 views
1

テーブルTRADE_ORDERSを検討してください。MYSQLエラー1442:トリガー/ストアドプロシージャ内のテーブルを更新できません

Symbol | Type | Count | Settled | Settled_count 
------ | -----| ------| --------| ------------- 
Apple | BUY | 100 | NO  | 0 
Apple | BUY | 50 | NO  | 0 

私はトリガー新しい行のAFTER INSERTがある場合は、未決済注文に応じて、以前の注文を解決しようとするだろうafter_trade_orders_insertを書かれています。

今度はINSERTTRADE_ORDERSに値Apple, SELL, 150の行を入力すると、購入したすべての株が決済されます。したがって、意図したアクションは、テーブルを下の状態にする必要があります。

意図した出力

Symbol | Type | Count | Settled | Settled_count 
------ | -----| ------| --------| ------------- 
Apple | BUY | 100 | YES  | 100 
Apple | BUY | 50 | YES  | 50 
Apple | SELL | 150 | YES  | 150 

私は達成するためにMySQLでコードを作成する方法を理解します。保存された機能/トリガにテーブル「NSE_FO」を更新できません1442は、それはすでに、ステートメントで使用されているために呼び出され、この:私はafter_trade_orders_insertでそれを行うためのコードを書くときしかし、それは誤り

エラーコードで失敗しますストアドファンクション/トリガ。 0.055秒

私はこのエラーが何であるか、なぜ起こるのかを理解しています。

質問:目的の出力を達成するにはどうすればよいですか?

答えて

0

私たちがやりたいことはできません - トリガー/ストアドプロシージャは、トリガーが呼び出された行と同じテーブルの別の行を更新できません。

どのように達成するには?このthread

に受け入れ答えから /へ インサートは、ターゲットテーブルを更新し、その後 全てにおいて、他の行(複数可)を更新すること、ストアドプロシージャを作成することで、それを行うための一般的方法トランザクション。

0

あなたは最近の挿入行をトリガーで更新することができませんので、where節をnewキーワードで使用する必要があります。

+0

しかし、同じテーブルの他の行を更新することはできますか? – bobdiya

+0

正確には、トリガーを使用している新しく挿入された行を更新することはできません。 –

+0

同じテーブルの他のいくつかの行を更新しようとしている場合。どのように達成するのですか? – bobdiya

関連する問題