多重insertについて
お世話になります。
MySQLの経験はありますが、Oracleは初心者です。
Oracleで「多重insert」を行いたいと思っています。
この表現が正しいか分かりません、一度のinsert文で
多数のレコードを追加したいと思っております。
MySQLですと、
insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX')
のように、()と,で区切って一度の複数のレコードを
インサートできますが、Oracleでは出来ませんでした。
Oracleで同様の動作を行う方法はあるのでしょうか?
お手数をおかけ致しますが、よろしくお願い致します。
投稿日時 - 2006-02-10 01:13:21
結論から言うとありません。
それは、SQLリファレンスを見ていただいても分かるかと思います。
insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX')
という記述方法は MySQL の拡張機能であり、SQL99 標準にはそのような記述方法はありません。
これは、Oracle の DECODE や NVL 関数、外部結合での (+) が MySQL や PostgreSQL で使えないのと同じことです (SQL99 に準拠する場合、前者は CASE 文を、後者は LEFT OUTER JOIN 句を使います)。
投稿日時 - 2006-02-11 20:45:50
entree様、ご回答ありがとうございます。
このような記述方法はないということですね。
投稿日時 - 2006-02-12 00:01:36
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(4)
記述量に由来する話であれば・・
お使いのミドルウエアにもよりますが、バインド変数を
使って、連続インサートことで十分に、合理的なのでは
ないですかね。
パースは1回しかしませんし、インサートの回数だけ、
インサートする値をパラメータにして呼び出すだけですから。
一つのSQL文に組み立てるロジックを書くより、簡単で
良いと思いますよ。
投稿日時 - 2006-02-11 05:23:36
お答えありがとうございます。
k_o_r_o_c_h_a_n様の仰るとおり
バインド変数を使ったほうが
合理的ですね。
通常のSQL文で行えないかと思い、
質問させていただきました。
ご回答ありがとうございました。
投稿日時 - 2006-02-12 00:00:19
一般的な方法である
insert into XXXX values(x,'XX');
insert into XXXX values(x,'XX');
insert into XXXX values(x,'XX');
と3つに分けて書くのでなく、1つで書く理由はなんですか?
その回答によっては、オラクルなりのやり方があるかもしれません。
投稿日時 - 2006-02-10 01:35:20
k_o_r_o_c_h_a_n様、お答えありがとうございます。
理由は、1つにまとめたほうが記述量が少なく、
楽だと思うからです。
投稿日時 - 2006-02-10 23:40:54