• ベストアンサー

多重insertについて

お世話になります。 MySQLの経験はありますが、Oracleは初心者です。 Oracleで「多重insert」を行いたいと思っています。 この表現が正しいか分かりません、一度のinsert文で 多数のレコードを追加したいと思っております。 MySQLですと、 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') のように、()と,で区切って一度の複数のレコードを インサートできますが、Oracleでは出来ませんでした。 Oracleで同様の動作を行う方法はあるのでしょうか? お手数をおかけ致しますが、よろしくお願い致します。

  • Oracle
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.4

結論から言うとありません。 それは、SQLリファレンスを見ていただいても分かるかと思います。 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') という記述方法は MySQL の拡張機能であり、SQL99 標準にはそのような記述方法はありません。 これは、Oracle の DECODE や NVL 関数、外部結合での (+) が MySQL や PostgreSQL で使えないのと同じことです (SQL99 に準拠する場合、前者は CASE 文を、後者は LEFT OUTER JOIN 句を使います)。

dai1113
質問者

お礼

entree様、ご回答ありがとうございます。 このような記述方法はないということですね。

その他の回答 (3)

回答No.3

記述量に由来する話であれば・・ お使いのミドルウエアにもよりますが、バインド変数を 使って、連続インサートことで十分に、合理的なのでは ないですかね。 パースは1回しかしませんし、インサートの回数だけ、 インサートする値をパラメータにして呼び出すだけですから。 一つのSQL文に組み立てるロジックを書くより、簡単で 良いと思いますよ。

dai1113
質問者

お礼

お答えありがとうございます。 k_o_r_o_c_h_a_n様の仰るとおり バインド変数を使ったほうが 合理的ですね。 通常のSQL文で行えないかと思い、 質問させていただきました。 ご回答ありがとうございました。

  • investyou
  • ベストアンサー率23% (13/56)
回答No.2

>一度のinsert文で多数のレコードを追加したいと思っております。 selectしたテーブルならまとめてインサートする事ができますが これじゃだめなんですか? insert into table1(fld1,fld2) select xfld1, xfld2 from table2

dai1113
質問者

お礼

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

回答No.1

一般的な方法である insert into XXXX values(x,'XX'); insert into XXXX values(x,'XX'); insert into XXXX values(x,'XX'); と3つに分けて書くのでなく、1つで書く理由はなんですか? その回答によっては、オラクルなりのやり方があるかもしれません。

dai1113
質問者

お礼

k_o_r_o_c_h_a_n様、お答えありがとうございます。 理由は、1つにまとめたほうが記述量が少なく、 楽だと思うからです。

関連するQ&A

  • MYSQL insertについて

    MYSQLについて MYSQLで insert into syouhin values(3,'ブラックコーヒー',120) で実行するとうまく入力されません charsetもsjisでしてますし、なにがいけないのでしょうか??おしえてくださいお願いします。

    • ベストアンサー
    • MySQL
  • MySQLへのINSERT

    JAVA Connection とPreparedStatement でMysqlへINSERT分を実行したいのですが、エラー が出力されます。 SELECT分だと正常に実行されるのですが。。。。どうしてでしょうか? ps = conn.prepareStatement(\" INSERT INTO test00 (data1) values (1)\")

    • ベストアンサー
    • Java
  • mysqlデータベースにinsertできない

    こんにちは。 現在、perlでmysqlにデータをinsertしているのですが、ある記号があった場合、挿入することが出来ません。 以下のようにしたところ、もし$titleや$komentoに「'」があった場合、insert文のシングルクオートと引っかかってるみたいです。 $dbh->do(qq|insert into suredo values ('$no','$title','$koment')|); そこで、今度は $dbh->do(qq|insert into suredo values ("$no","$title","$koment")|); とした場合、今度は「"」があった場合ダメみたいです。 このような場合、「’」や「”」があってもinsertできる様にするにはどのようにしたらよろしいのでしょうか? どのたかよろしくお願いします。

    • ベストアンサー
    • Perl
  • mysql の insert文のクォーテーションについて

    インサート文を作るとき、 INSERT INTO shitumon (  title_question,  komari_level )VALUES(  'mysql の insert文のクォーテーションについて',  '2' ) のように、int系のデータに''とクォーテーションつけても 問題ないのでしょうか? int系のデータのクォーテーションは外しておくのが望ましいのでしょうか?

    • ベストアンサー
    • MySQL
  • insertがうまくいかない

    PHP5+MYSQLの環境で $sql_str = "INSERT INTO bbs(userid,toukouid,groupid,title,memo) VALUES('$name','$toukouid','$group','$title','$memo')"; mysql_query($sql_str, $con_id); を実行しますが、登録ができません。 mysql_queryの結果がfalseです・・・。 ちなみに変数は全て1が代入しています。 悪いところあれば指摘お願いいたします。 また、他の情報が必要であればもうしつけください。

    • 締切済み
    • PHP
  • INSERT文の書式

    oracleに触るの初めてなのにストアドなんて書くことに・・ 助けを頂けたらと思います。 ストアドの中でですが・・・・ INSERT文の中ではテーブルの項目が2つ以上あるとき、 変数にその2つ以上分の値を文字列として入れておいて 、その値をINSERT文に流すことってできないのでしょう か? test_str := (' ''テスト1'' , ''テスト2'' '); insert into TestTable (test1 , test2 ) values (test_str); 上記のように書くと PL/SQL: ORA-00947: 値の個数が不足しています。 とのエラーが帰ってきます。 上記のように変数を使って下記のように解釈させたいのですが無理なのでしょうか? insert into TestTable (test1 , test2 ) values ('テスト1','テスト2'); それではお願いします。 失礼いたします。

  • バルクINSERT直後に、最後のIncremet値は取得できますか?

    PHPからMySQLへトランザクションを使わずに、 INSERT INTO test (id,count) VALUES (5,5),(6,6) のようにINSERTした直後に、SELECT LAST_INSERT_ID(); としても、5が返却されてしまいます。 これはMySQLの仕様でしょうか? 又、 SELECT LAST_INSERT_ID() ではなく、 SELECT LAST_INSERT_ID() FROM test; のようにテーブル名を指定する方法は何か意味があるのでしょうか? テーブル名を指定すると、テーブルにあるレコード数分 データが返却されてしまいました。。

    • ベストアンサー
    • MySQL
  • 各DBにinsertする方法

    FreeBSD 4.10 MYSQL version: 4.0.22 上記の環境で作業を行っているのですが、 各DBに定期的にinsert文やalter文を実行しております。 その際に test.txtファイル内に insert文等を書き、以下のコマンドを実行しているのですが、 mysql -u xxxx -p xxxx < test.txt mysql -u xxxx -p yyyy < test.txt mysql -u xxxx -p zzzz < test.txt この処理を一度に実行したいと考えているのですが どのようなバッチを作成すればいいのでしょうか 恐れ入りますがお教えください。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • INSERT文(2)について

    お願い致します。 ORACLE9iを使用しています。 INSERT INTO tableA(AA,BB,CC,DD,・・・) VALUES (AA,BB,CC,DD・・・) ************************** 項目  長さ AA 11,3 BB 11,3 CC 11,3 ・ ・ ************************** 現在データ(VALUES句内部) AA→0.00000000まで ・ ・ *************************** 状態です。 SQL文上のINTO句とVALUES句の値の対応は取れています。 VALUES句が現在は少数点以下切捨てしてない状態な為、ORACLE項目の長さ以上に値が指定されているのですが、これが原因でエラーになっているのでしょうか? エラーメッセージ:「VALUESキーワードがありません」 お願い致します。