【问题标题】:Getting an error ORA-00933: SQL command not properly ended收到错误 ORA-00933: SQL 命令未正确结束
【发布时间】:2017-03-12 14:52:23
【问题描述】:

我试图将数据插入到现有表中,但出现错误。该表定义如下。

ITEM_NUM CHAR(4)

DESCRIPTION CHAR(30)

ON_HAND NUMBER(4,0)

类别字符(3)

价格编号(6,2)

这是出现错误的 SQL

INSERT INTO NONGAME
    VALUES ("CD33", "Wood Block Set (48 piece)",36,"TOY",89.49),
               ("DL51", "Classic Railway Set",  12, "TOY", 107.95),
               ("DR67","Giant Star Brain Teaser",24,"PZL",31.95),
               ("FD11", "Rocking Horse",8,"TOY",124.95),
               ("FH24","Puzzle Gift Set",65,"PZL",38.95),
               ("KD34","Pentominoes Brain Teaser",60,"PZL",14.95),
               ("MT03","Zauberkasten Brain Teaser",45,"PZL",45.79),
               ("NL89", "Wood Block Set (62 piece)",32,"TOY",119.75),
               ("TW35","Fire Engine",30,"TOY",118.95);

【问题讨论】:

  • 嗯...你没有错过insert into 部分吗?
  • 有一个 INSERT INTO NONGAME
  • 非常感谢最后一次编辑
  • 不得不更正那部分由于某种原因没有复制的代码
  • Oracle 不支持多行inserts

标签: sql oracle


【解决方案1】:

您需要更改语法以使用 INSERT ALL 并将双引号替换为单引号。

INSERT ALL
   INTO NONGAME (ITEM_NUM, DESCRIPTION, ON_HAND, CATEGORY, PRICE) VALUES ('CD33', 'Wood Block Set (48 piece)',36,'TOY',89.49)
   INTO NONGAME (ITEM_NUM, DESCRIPTION, ON_HAND, CATEGORY, PRICE) VALUES  ('DL51', 'Classic Railway Set',  12, 'TOY', 107.95)
   -- ADD AS MENU RECORDS AS YOU WANT HERE
SELECT 1 FROM DUAL;

SELECT 1 FROM DUAL 是必需的,因为 INSERT ALL 需要 SELECT 子查询,这会提供单行虚拟数据。

INSERT ALL 比单独的插入语句提高了性能,因此如果您要插入许多这样的记录,请务必使用这种语法,而不是一次插入一条,请参阅Oracle Insert All

关于您的评论:

“我得到 ORA-00984:此处不允许列”

因为在 SQL 中双引号用于数据库对象名称:文字需要单引号。 (更正代码示例以反映这一事实。)

【讨论】:

  • 到目前为止,他的建议都没有奏效。我已经将它简化为一个列插入非游戏值(“CD33”、“木块套装(48 件)”、36、“玩具”、89.49);我得到 ORA-00984: column not allowed here
  • 再次尝试一条记录,但这次明确说明表列,例如INTO NONGAME(ITEM_NUM、DESCRIPTION、ON_HAND、CATEGORY、PRICE)
  • 问题已解决。我将双引号更改为单引号,它工作正常。谢谢大家的意见。
【解决方案2】:

Oracle 支持单引号而不是双引号。试试这个:

INSERT INTO NONGAME
    VALUES ('CD33', 'Wood Block Set (48 piece)',36,'TOY',89.49),
               ('DL51', 'Classic Railway Set',  12, 'TOY', 107.95),
               ('DR67','Giant Star Brain Teaser',24,'PZL',31.95),
               ('FD11', 'Rocking Horse',8,'TOY',124.95),
               ('FH24','Puzzle Gift Set',65,'PZL',38.95),
               ('KD34','Pentominoes Brain Teaser',60,'PZL',14.95),
               ('MT03','Zauberkasten Brain Teaser',45,'PZL',45.79),
               ('NL89', 'Wood Block Set (62 piece)',32,'TOY',119.75),
               ('TW35','Fire Engine',30,'TOY',118.95);

【讨论】:

  • 虽然如此,但 Oracle 不支持带有 values 子句的多行。
  • 那么使用单引号的最佳方法是什么?
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多