- PR -

SQLのINSERTで複数行の登録を一度にしたい

投稿者投稿内容
caz
会議室デビュー日: 2007/04/03
投稿数: 8
投稿日時: 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です。
どこがおかしいかご指摘ください。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-04-03 18:15
 RDBMSによっては一度に複数行のレコードをインサート出来ます。
私の知る限りDB2とmySQLでは可能ですが、Oracleでも可能なのですか?
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-04-03 18:20
JDBC経由実行していると仮定しての話ですが、バッチ実行をすると
複数のSQL発行をまとめて実行できますよ。ドライバがやってくれる
処理ではありますけど。
caz
会議室デビュー日: 2007/04/03
投稿数: 8
投稿日時: 2007-04-03 18:32
ご返答ありがとうございます。
実は私、かなり初心者レベルでして、JDBC等全くわかりません。とにかく、環境次第なところが大きいってことですよね。その辺がどうなっているのか調査してみます。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2007-04-03 18:35
1つのSQL文で複数の表にINSERTする絶品テクニック(atmarkit.co.jp)

[追記]
提示したサイトでは、複数のテーブルにINSERTする例となっているが、同一のテーブルでもできたはず。
ただし、何か制限があったような気がするが忘れた。
#総列数だったかな?

[ メッセージ編集済み 編集者: かずくん 編集日時 2007-04-03 18:39 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-04-03 18:38
引用:

小僧さんの書き込み (2007-04-03 18:20) より:
JDBC経由実行していると仮定しての話ですが、バッチ実行をすると
複数のSQL発行をまとめて実行できますよ。ドライバがやってくれる
処理ではありますけど。


 Oracleの場合、JDBCに基づいたバッチ処理もありますが、
Oracle固有のバッチ処理の方が楽だと思いますよ。
但し、注意しなければいけないのは、
Oracleは途中で例外が発生すると処理を止めてしまい、
どこで例外が発生したか解らない点です。
キー重複が発生しない状態なら使えるでしょうが、
キー重複が発生する処理だとかなり使いづらいと思います。
caz
会議室デビュー日: 2007/04/03
投稿数: 8
投稿日時: 2007-04-03 18:45
かずくんさん、すみません。どの例文がそれにあたるか教えてください。
すみょし
常連さん
会議室デビュー日: 2007/01/25
投稿数: 36
投稿日時: 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;

これっすね。

スキルアップ/キャリアアップ(JOB@IT)