- - PR -
SQLのINSERTで複数行の登録を一度にしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-03 18:05
はじめまして。お世話になります。
下記のSQL文を実行すると「ORA-00933: SQLコマンドが正しく終了されていません。」と言われてしまいます。 VALUES部分が1行だとOKなのですが、複数行になるとだめです。 INSERT INTO T_CHOHYO_SUM (BATCH_NO, BATCH_RENBAN, KOMOKU_CD, KOMOKU_SEQ, KOMOKU_VALUE, INS_RIYOSHA_CD, INS_DATE, UPD_RIYOSHA_CD, UPD_DATE) VALUES ('tt00', '0000', 'S0060', 1, '11111', 'TEST', SYSDATE, 'TEST', SYSDATE), ('tt00', '0000', 'S0070', 1, '11111', 'TEST', SYSDATE, 'TEST', SYSDATE ) ちなみにoracleは10.2です。 どこがおかしいかご指摘ください。 | ||||
|
投稿日時: 2007-04-03 18:15
RDBMSによっては一度に複数行のレコードをインサート出来ます。
私の知る限りDB2とmySQLでは可能ですが、Oracleでも可能なのですか? | ||||
|
投稿日時: 2007-04-03 18:20
JDBC経由実行していると仮定しての話ですが、バッチ実行をすると
複数のSQL発行をまとめて実行できますよ。ドライバがやってくれる 処理ではありますけど。 | ||||
|
投稿日時: 2007-04-03 18:32
ご返答ありがとうございます。
実は私、かなり初心者レベルでして、JDBC等全くわかりません。とにかく、環境次第なところが大きいってことですよね。その辺がどうなっているのか調査してみます。 | ||||
|
投稿日時: 2007-04-03 18:35
つ1つのSQL文で複数の表にINSERTする絶品テクニック(atmarkit.co.jp)
[追記] 提示したサイトでは、複数のテーブルにINSERTする例となっているが、同一のテーブルでもできたはず。 ただし、何か制限があったような気がするが忘れた。 #総列数だったかな? [ メッセージ編集済み 編集者: かずくん 編集日時 2007-04-03 18:39 ] | ||||
|
投稿日時: 2007-04-03 18:38
Oracleの場合、JDBCに基づいたバッチ処理もありますが、 Oracle固有のバッチ処理の方が楽だと思いますよ。 但し、注意しなければいけないのは、 Oracleは途中で例外が発生すると処理を止めてしまい、 どこで例外が発生したか解らない点です。 キー重複が発生しない状態なら使えるでしょうが、 キー重複が発生する処理だとかなり使いづらいと思います。 | ||||
|
投稿日時: 2007-04-03 18:45
かずくんさん、すみません。どの例文がそれにあたるか教えてください。
| ||||
|
投稿日時: 2007-04-03 19:00
SQL> insert all
2 into sample_table (id, name, value) values (1, 'TKISHIMO', 0) 3 into sample_table2 (id, name, value) values (2, 'MHAYASHI', 0) 4 select * from dual; これっすね。 |