oracle标识符太长了

时间:2016-02-24 16:58:28

标签: oracle oracle11g identifier composite-primary-key

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

我找不到任何解决方法

1 个答案:

答案 0 :(得分:1)

我清理了脚本并纳入了评论:

  • 在数字(5)后添加逗号
  • 将所有名称更改为大写以便以后节省痛苦
  • 更改了NAME,这是对S_NAME的Oracle保留密钥工作
  • 将数据类型从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) );