2013-06-25 14 views
5

私はこの私はSQLコマンドでエラーが適切に

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 1, 32.5), 
('123456789', 2, 7.5), 
('666884444', 3, 40.0), 
('453453453', 1, 20.0), 
('453453453', 2, 20.0), 
('333445555', 2, 10.0), 
('333445555', 3, 10.0), 
('333445555', 10, 10.0), 
('333445555', 20, 10.0), 
('999887777', 30, 30.0), 
('999887777', 10, 10.0), 
('987987987', 10, 35.0), 
('987987987', 30, 5.0), 
('987654321', 30, 20.0), 
('987654321', 20, 15.0), 
('888665555', 20, 0); 

を入力したときに、私は次のエラー

ORA-00933取得終了していない取得しています:SQLコマンドが正常に

+0

これは、Oracleで複数行の挿入を行う方法ではなく、デュアル選択(ugh!)と組み合わせた奇妙なマルチテーブル挿入を使用する必要があります。 – paxdiablo

答えて

6

Oracleでは、複数の値セットを指定することはできませんこのように(私はあなたがその構文が許可されているMySQLの背景から来ていると思います)。最も簡単な方法は、複数のINSERT

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 1, 32.5); 

INSERT INTO works_on 
(essn, pno, hours) 
values 
('123456789', 2, 7.5); 

INSERT INTO works_on 
(essn, pno, hours) 
values 
('666884444', 3, 40.0); 

... 

を生成することですまた、あなたが、残念ながらOracleでそのような単一のインサートにすべての値を組み合わせることができない単一INSERT ALLの文

INSERT ALL 
    INTO works_on(essn, pno, hours) values('123456789', 1, 32.5) 
    INTO works_on(essn, pno, hours) values('123456789', 2, 7.5) 
    INTO works_on(essn, pno, hours) values('666884444', 3, 40.0) 
    INTO works_on(essn, pno, hours) values('453453453', 1, 20.0) 
    INTO works_on(essn, pno, hours) values('453453453', 2, 20.0) 
    INTO works_on(essn, pno, hours) values('333445555', 2, 10.0) 
    INTO works_on(essn, pno, hours) values('333445555', 3, 10.0) 
    ... 
SELECT * 
    FROM dual; 
+0

これは、私がこれまで知らなかった「シンプル」という言葉のいくつかの_new_定義でなければなりません。しかし、あなたが正しいから+1。私はNULLと空の文字列の違いを理解できないDBMSベンダーからはほとんど期待していないでしょう:-) – paxdiablo

+0

その解決策は機能しました。あなたが見ることができるように、私はこのようなことについての悩みで、これは初めてのデータベースクラスです。ありがとう。 – UnPatoCuacCuac

+0

この「デュアル」とは何ですか? – AlwaysLearning

0

を終了していないがかかり試しますthis by ShoeLace

1

を使用して複数の行を挿入することができます。あなたのSQL文を分離し、または単一のステートメントで実行するには、このように別のアプローチを使用することができ、次のいずれか

INSERT INTO works_on (essn, pno, hours) 
SELECT '123456789', 1, 32.5 FROM DUAL UNION 
SELECT '123456789', 2, 7.5 FROM DUAL UNION 
SELECT '666884444', 3, 40.0 FROM DUAL UNION 
SELECT '453453453', 1, 20.0 FROM DUAL UNION 
... 
SELECT '987987987', 30, 5.0 FROM DUAL UNION 
SELECT '987654321', 30, 20.0 FROM DUAL UNION 
SELECT '987654321', 20, 15.0 FROM DUAL UNION 
SELECT '888665555', 20, 0 FROM DUAL 

SQL Fiddle Demo

0

VALUES構文はデータベースに一つだけのエントリを挿入するサポートしています。 ORACLE FAQsでは、以下のことが示唆された:

INSERT ALL 
INTO works_on (essn, pno, hours) VALUES ('123456789', 1, 32.5) 
INTO works_on (essn, pno, hours) VALUES ('123456789', 2, 7.5) 
INTO works_on (essn, pno, hours) VALUES ('666884444', 3, 40.0) 
INTO works_on (essn, pno, hours) VALUES ('453453453', 1, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('453453453', 2, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 2, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 3, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 10, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('333445555', 20, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('999887777', 30, 30.0) 
INTO works_on (essn, pno, hours) VALUES ('999887777', 10, 10.0) 
INTO works_on (essn, pno, hours) VALUES ('987987987', 10, 35.0) 
INTO works_on (essn, pno, hours) VALUES ('987987987', 30, 5.0) 
INTO works_on (essn, pno, hours) VALUES ('987654321', 30, 20.0) 
INTO works_on (essn, pno, hours) VALUES ('987654321', 20, 15.0) 
INTO works_on (essn, pno, hours) VALUES ('888665555', 20, 0) 
SELECT * FROM dual; 
-3
INSERT INTO 
WORKS_ON VALUES 
(&ESSN,&PNO,&HOURS); 

u'llはダット以下のように取得した後。

ENTER VALUE FOR ESSN: IN THIS U ENTER 123456789 

ENTER VALUE FOR PNO: IN THIS U ENTER 1 

ENTER VALUE FOR HOURS:32.5 

その後あなたは得られます。

1 ROWは、次に入力し'/'記号を入力し、キーを押し

を作成されます。あなたはそのテーブルに別の行を挿入するためにenterを取得します。

上記の手順を実行すると、テーブルに行を簡単に挿入できます。

+3

お願いします。叫ぶ必要はありません。大文字のテキストは読みにくいです。可能であればフォーマットを変更してみてください –

関連する問題