- - PR -
ORACLEのMERGE分
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-29 10:27
オラクル9iで以下のMERGE文が
データがあれば更新されますが、なければ登録されないです。 調査しても原因がわかりませんでした。 原因がわかる人いますか? SQLが悪いのか何が悪いのかまったく不明の状態に陥っています。 MERGE INTO TBL TA USING DUAL ON (TA.A = '1' AND TA.B = '2' AND TA.C = 3 AND TA.D = 4 AND TA.E = '5' AND TA.F = 6 AND TA.G = '7') WHEN MATCHED THEN UPDATE SET TA.H = 8, TA.M = SYSDATE, TA.N = '13', TA.O = '14', TA.P = TA.L + 1 WHEN NOT MATCHED THEN INSERT(TA.A, TA.B, TA.C, TA.D, TA.E, TA.F, TA.G, TA.H, TA.I, TA.J, TA.K, TA.L, TA.M, TA.N, TA.O, TA.P) VALUES('1', '2', 3, 4, '5', 6, '7', 8, '9', SYSDATE, '11', '12', SYSDATE, '13', '14', 1) | ||||||||
|
投稿日時: 2007-02-01 11:29
遅レスですけど以下の部分を変更して試してみてもらえますか?
修正前 ---------------------------------- MERGE INTO TBL TA USING DUAL ON (TA.A = '1' AND TA.B = '2' AND TA.C = 3 AND TA.D = 4 AND TA.E = '5' AND TA.F = 6 AND TA.G = '7') ---------------------------------- 修正後 ---------------------------------- USING (SELECT '1' AS A, '2' AS B, 3 AS C, 4 AS D, '5' AS E, 6 AS F, '7' AS G FROM DUAL TB ON (TA.A = TB.A AND TA.B = TB.B AND TA.C = TB.C AND TA.D = TB.D AND TA.E = TB.E AND TA.F = TB.F AND TA.G = TB.G) ---------------------------------- OTGの過去ログ(キャッシュ) http://72.14.235.104/search?q=cache:Xw6XDD_FZ2sJ:otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi%3Fcommunityid%3Dotn-901234%26bbsid%3D1%26no%3D19833%26view%3D8+MERGE%E3%80%80ORACLE%E3%80%80%E4%B8%8D%E5%85%B7%E5%90%88&hl=ja&gl=jp&ct=clnk&cd=3 Oracleに問い合わせするということでCloseになってて結果不明。 9iのMERGEは使わないほうがいいかもです。 | ||||||||
|
投稿日時: 2007-02-01 16:48
9iではUSINGにDUAL表の使用はうまくいかなかった記憶があります。
前の人のようにSELECTの結果にすれば問題なかった思います。 ※MERGEでUPDATEしかしないときと間違えたので修正 [ メッセージ編集済み 編集者: 海鶏 編集日時 2007-02-01 17:33 ] | ||||||||
|
投稿日時: 2007-02-01 18:08
こういう場合えてして
な行が存在する別のテーブルTBL2があったりしませんか? もしあればそのテーブルを利用して
な感じに書くのがいいのではないかと思います。 | ||||||||
|
投稿日時: 2007-02-01 19:02
MERGEは9iの新機能ですので、正直言って初期のバージョンではバグが枯れきっていません。
可能であればサポートからパッチを入手して下さい。 | ||||||||
|
投稿日時: 2007-02-05 11:54
遅レスで申し訳ございません。
オラクルのバージョンは9.2.0.1.0 でした。 バグって事にして、バージョンアップしてみます。 ありがとうございます。 |
1