我在SQL命令中收到错误未正确结束

UnP*_*uac 7 sql sqlcommand oracle11g

当我进入这个

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);
Run Code Online (Sandbox Code Playgroud)

我得到了跟随错误

ORA-00933:SQL命令未正确结束

Jus*_*ave 10

在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);

...
Run Code Online (Sandbox Code Playgroud)

您还可以使用单个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;
Run Code Online (Sandbox Code Playgroud)

  • 这一定是我以前不知道的“简单”这个词的一些_新_定义。但是+1,因为你是对的。我应该期望从无法区分 NULL 和空字符串的 DBMS 供应商那里获得更多信息:-) (2认同)
  • 这是什么“双重”? (2认同)