【问题标题】:Oracle: ORA-00984: column not allowed hereOracle:ORA-00984:此处不允许列
【发布时间】:2018-06-05 21:58:35
【问题描述】:

我的数据库有问题。我已经创建了表:

CREATE TABLE TOURNAMENT
  (
    TOURNAMENT_ID   INTEGER NOT NULL,
    DATE            DATE NOT NULL,
    CITY            VARCHAR2 (100 CHAR) NOT NULL,
    PRIZEPOOL       NUMBER (18,2) NOT NULL,
    COUNTRY         VARCHAR2 (100 CHAR) NOT NULL,
    ARENA           VARCHAR2 (100 CHAR),
    SHOP_ID         INTEGER,
    PRODUCTION_ID   INTEGER NOT NULL
  );

ALTER TABLE TOURNAMENT ADD CONSTRAINT TOURNAMENT_PK PRIMARY KEY ( TOURNAMENT_ID ) ;

当我尝试插入一行时:

prompt Tabulka TOURNAMENT

insert into TOURNAMENT (TOURNAMENT_ID, DATE, CITY, PRIZEPOOL, COUNTRY, ARENA, SHOP_ID, PRODUCTION_ID)
values (1, 08-OCT-2015, 'Moscow', 15000, 'Russia', NULL, 1, 3);

我收到一条错误消息:

ORA-00984:此处不允许列

有人知道这意味着什么吗?

【问题讨论】:

  • 也许您只需要在日期常量周围加上引号。
  • 首先,表中不能有名为 DATE 的列,请将其重命名为 TOURNAMENT_DATE 之类的名称
  • 是的,就是这样。非常感谢。
  • 为了解释错误消息,解析器在您的 values 子句中拒绝了单词 OCT。它已将其解释为列名(类似于stackoverflow.com/q/10178292/230471),并且在insertvalues 子句中不允许列名。

标签: sql oracle oracle11g


【解决方案1】:

这应该可行 -

CREATE TABLE TOURNAMENT
  (
    TOURNAMENT_ID   INTEGER NOT NULL ,
    TOURNAMENT_DATE       DATE NOT NULL ,
    CITY       VARCHAR2 (100 CHAR) NOT NULL ,
    PRIZEPOOL   NUMBER (18,2) NOT NULL ,
    COUNTRY        VARCHAR2 (100 CHAR) NOT NULL ,
    ARENA       VARCHAR2 (100 CHAR) ,
    SHOP_ID   INTEGER ,
    PRODUCTION_ID INTEGER NOT NULL
  ) ;
ALTER TABLE TOURNAMENT ADD CONSTRAINT TOURNAMENT_PK PRIMARY KEY ( TOURNAMENT_ID ) ;



insert into TOURNAMENT (TOURNAMENT_ID, TOURNAMENT_DATE, CITY, PRIZEPOOL, COUNTRY, ARENA, SHOP_ID, PRODUCTION_ID) values (1, TO_DATE('08-OCT-2015','DD-MON-YYYY'), 'Moscow', 15000, 'Russia', NULL, 1, 3);

【讨论】:

    【解决方案2】:

    您以错误的方式写入日期值;一种方法是使用 ANSI 格式:

    INSERT INTO TOURNAMENT(
                           TOURNAMENT_ID,
                           DATE_,
                           CITY,
                           PRIZEPOOL,
                           COUNTRY,
                           ARENA,
                           SHOP_ID,
                           PRODUCTION_ID
                          )
         VALUES (
                 1,
                 DATE '2015-10-08',
                 'Moscow',
                 15000,
                 'Russia',
                 NULL,
                 1,
                 3
                );
    

    或者,如果您想保留显示的格式,请使用to_date

    to_date('08-OCT-2015', 'DD-MON-YYYY')
    

    另外,DATE 是一个保留字,你最好避免使用它来命名表列。

    【讨论】:

    • 谢谢。实际上我那里没有“日期”。所有变量都用我的斯拉夫语命名,但因为我想让你明白我应该做什么,所以我翻译了整个表格:)
    猜你喜欢
    • 2020-03-31
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多