こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

多重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

QNo.1955746

暇なときに回答ください

質問者が選んだベストアンサー

結論から言うとありません。

それは、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

ANo.4

この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

ANo.2

>一度のinsert文で多数のレコードを追加したいと思っております。

selectしたテーブルならまとめてインサートする事ができますが
これじゃだめなんですか?

insert into table1(fld1,fld2) select xfld1, xfld2 from table2

投稿日時 - 2006-02-10 09:45:47

お礼

investyou様、おこたえありがとうございます。

テーブルとして既にデータが存在するものではなく、
新規でデータを挿入したいと考えております。

投稿日時 - 2006-02-10 23:43:03

一般的な方法である
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

あなたにオススメの質問