ここから本文です

以下を実行するとSQLコマンドが正しく終了されていません。

kie********さん

2015/6/2414:21:56

以下を実行するとSQLコマンドが正しく終了されていません。

と出るのですが何が間違っているのでしょうか

INSERT INTO F_URIAGE
(
KYAKUNO,SURYO
)
VALUES
(1, 10),
(1, 20),
(1, 10),
(2, 20),
(2, 10),
(3, 30),
(3, 20),
(3, 10),
(5, 10),
(6, 10);

閲覧数:
2,509
回答数:
3

違反報告

ベストアンサーに選ばれた回答

kap********さん

2015/6/2416:51:11

Oracleですか?

その場合、ORA-XXXX のエラーコードで質問するか調べた方がいいですよ。

ちなみにOracleはMySQLのように複数データの一括投入はできません。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

dra********さん

2015/6/2422:04:44

sqlplusで実行していますか、CSEで実行すると最後のセミコロンはいらない
のですが.......。
ちなにみ、1レコードのみをinsertしてみて、その結果はどうでしょうか?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

wx1********さん

2015/6/2421:59:29

SQLの書式が正しくないだけですね。その書式では動きません。

INSERT INTO F_URIAGE (KYAKUNO,SURYO) VALUES (1, 10);

ここまでが一つのINSERT文です。VALUES句を使うINSERT文では、複数個の値を同時に入れることは不可能(INSERT ALL文を使えば可能だが、ここではメリット無し)ですから、上記の1個目の値のカッコを閉じた時点で終わらなければ行けないのに、意味不明な文が続いたからエラーだと言われているのです。

INSERT INTO F_URIAGE (KYAKUNO,SURYO)
SELECT 1, 10 FROM DUAL
UNION ALL SELECT 1, 20 FROM DUAL
UNION ALL SELECT 1, 10 FROM DUAL
UNION ALL SELECT 2, 20 FROM DUAL


UNION ALL SELECT 5, 10 FROM DUAL
UNION ALL SELECT 6, 10 FROM DUAL
;

このように、INSERT SELECT文にすれば、SELECT結果の複数行を一括してINSERTすることが可能となり、かつ、UNION句で複数のSELECT文を連結することも可能となります。UNION ALL句にすれば、重複を絞り込まなくなるので、同じ値を複数入れることも可能となります。

UNION句はDISTINCTと同じ効果があるため、若干遅いですから、速度重視という観点からもUNION ALLの方が良いです。

あとはDUAL表をSELECTすることで、値は自分で用意したものを入れるということも可能になるというわけです。

取りあえず、Oracleがサポートする正しい書式に修正してください。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる