【问题标题】:oracle identifier too longoracle 标识符太长
【发布时间】:2016-02-24 16:58:28
【问题描述】:

Oracle 新手 我正在尝试分配复合键

CREATE TABLE rep_contracts
( Store_id NUMBER(8),
  Name NUMBER(5)
  Quarter CHAR(3),
  Rep_id NUMBER(5),
    CONSTRAINT rep_contracts_rep_idstore_id_pk PRIMARY KEY (rep_id, store_id),
    CONSTRAINT rep_contracts_rep_id_fk FOREIGN KEY (rep_id),
     CONSTRAINT rep_contracts_store_id_fk FOREIGN KEY (store_id) );

我收到了

ORA-00972: identifier is too long

我知道复合键标识符超过 30 个字符 但是如果我将标识符缩短几个字符,例如:

rep_contrac_rep_idstore_id_pk  

然后我收到

ORA-00905: missing keyword

我找不到任何解决方法

【问题讨论】:

  • 您省略了两个外键的 REFERENCES 子句。
  • 呃所以问题中的错误不是错误 - 你解决了这个问题,它与长度无关,问题是 缺少关键字
  • @Alex 是的,但是关键字太长“解决”了缺少关键字的问题! ;-)
  • 你在Name NUMBER(5)之后错过了,

标签: oracle oracle11g identifier composite-primary-key


【解决方案1】:

我清理了脚本并合并了 cmets:

  • 在数字 (5) 后添加了一个逗号
  • 将所有名称更改为大写以便以后避免痛苦
  • 将作为 Oracle 保留密钥工作的 NAME 更改为 S_NAME
  • 将数据类型从 CHAR 更改为 VARCHAR2
  • 添加了references关键字来指向外键所在的表
  • 重命名约束,使其不超过 30 个字符

像这样:

 CREATE TABLE rep_contracts
   ( STORE_ID NUMBER(8),
     S_NAME NUMBER(5),
     QUARTER VARCHAR2(3),
     REP_ID NUMBER(5),
     CONSTRAINT rep_cont_rep_idstore_id_pk PRIMARY KEY (REP_ID, STORE_ID),
     CONSTRAINT rep_contracts_rep_id_fk FOREIGN KEY REFERENCES your_table(REP_ID),
     CONSTRAINT rep_contracts_store_id_fk FOREIGN KEY REFERENCES your_table(STORE_ID) );

【讨论】:

  • •changed all names to uppercase to save pain later -- 这是一个无关紧要的变化。仅当您使用区分大小写的标识符(即用双引号括起来)时才重要,这在创建表时应该是非常例外的!
  • @Boneist 不相关,如果您知道区分大小写的标识符。对于刚接触 Oracle 的人来说,大写是一个好习惯。
猜你喜欢
  • 2014-02-08
  • 2013-10-01
  • 1970-01-01
  • 2011-02-16
  • 2012-07-09
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多