2012-05-13 19 views
0

私はテーブルaccountsactionを持っています。 actionに格納されている命令に従って、accountsを変更する必要があります。
各行には、account-id、アクション(i = insert、u = update、d = delete、x =無効な操作)およびアカウントの更新量が含まれています。挿入時にJava:トランザクション処理システム

  • アカウントがすでに存在する場合、更新は更新時に代わりに
  • を行うべきであるアカウントが存在しない場合、それは、ON DELETE 挿入
  • によって作成されます行が存在しない場合、アクションはとられない

入力

アカウント:

+---id----value--+ 
| 1 | 1000 | 
| 2 | 2000 | 
| 3 | 1500 | 
| 4 | 6500 | 
| 5 | 500 | 
+----------------+ 

アクション:

+---account_id---o---new_value---status---+ 
|  3  | u |  599 |   | 
|  6  | i | 2099 |   | 
|  5  | d |   |   | 
|  7  | u | 1599 |   | 
|  1  | i |  399 |   | 
|  9  | d |   |   | 
|  10  | x |   |   | 
+-----------------------------------------+ 

出力

アカウント:

+---id----value--+ 
| 1 | 399 | 
| 2 | 800 | 
| 3 | 599 | 
| 4 | 1400 | 
| 6 | 20099 | 
| 7 | 1599 | 
+----------------+ 

アクション:

+---account_id---o---new_value-------------------status----------------+ 
|  3  | u |  599 | Update: Success      | 
|  6  | i | 20099 | Update: Success      | 
|  5  | d |   | Delete: Success      | 
|  7  | u | 1599 | Update: ID not founds. Value inserted | 
|  1  | i |  399 | Insert: Acc exists. Updated instead | 
|  9  | d |   | Delete: ID not found     | 
|  10  | x |   | Invalid operation: No action taken | 
+----------------------------------------------------------------------+ 

私は、JavaとJDBCを経験したのですが、残念ながら私はここで起動する方法を、知りません。
追加のテーブルが必要ですか?トリガーを使用する必要がありますか?

+0

これで何をしましたか? –

+0

これを完全にSQLに入れる必要がありますか?または、ステータスコードはJavaコードから生成できますか?それがJavaコードの場合は、上のロジックをコード化するのは簡単です。それにかかわらず、あなたはi、o、uの解決をJavaコードに入れようとしているので、トリガーなどを必要とせずにロジックの残りの部分を実行することができます。 –

+0

いいえ、それはどのように解決するかです。私はちょうど始める方法を知らない。追加のテーブルが必要ですか? – user1170330

答えて

0

私はupsertの2つのテクニックを見てきました。最初の手法では、トランザクション内で行が存在するかどうか最初にテストし、その結果を使用して挿入または更新を実行するかどうかを判断します。 2番目の手法では、更新を実行し、更新されたレコードの数を確認します(JDBCはこれを提供します)。それがゼロの場合は、挿入を行います。挿入されていれば、完了です。

+0

2番目のアプローチは、最初のアプローチでは存在のチェックが2回行われるため(更新、挿入はそれをチェックする必要があるため)、高速になります。 –

関連する問題