更改列以在Toad中添加序列错误

时间:2017-03-19 10:02:49

标签: sql oracle plsql

CREATE TABLE C_ORDER  
( 
    OrderNumber     NUMBER(5), 
    OrderDate       DATE DEFAULT (sysdate), 
    CustomerName    VARCHAR2(100), 
    CONSTRAINT c_order_pk PRIMARY KEY (OrderNumber),
    CONSTRAINT customername_uq UNIQUE(CustomerName)
);

CREATE SEQUENCE ordernumber_seq 
 START WITH     1 
 INCREMENT BY   1 
 NOCACHE 
 NOCYCLE;

ALTER TABLE C_ORDER 
    MODIFY OrderNumber NUMBER(5) DEFAULT ordernumber_seq.NEXTVAL;

代码在livesql中工作,但是当我尝试在Toad中执行它时,此错误显示:

  
    

ALTER TABLE C_ORDER         MODIFY OrderNumber NUMBER(5)DEFAULT ordernumber_seq.NEXTVAL     第1行出错     ORA-00984:这里不允许列

  

1 个答案:

答案 0 :(得分:0)

这适用于Oracle 12c,但目前尚不允许11.2g,请参阅版本11.2g的ALTER TABLE声明文档:

  

默认

     

使用DEFAULT子句为新列或新列指定默认值   现有列的默认值。 Oracle数据库将此值分配给   如果后续INSERT语句省略了该值的列   柱。如果要向表中添加新列并指定   默认值,然后数据库将默认列值插入   表的所​​有行。

     

默认值的数据类型必须与指定的数据类型匹配   为列。该列也必须足够大以容纳   默认值。

     

默认列值的限制
  默认列值是   受以下限制:

     

DEFAULT表达式不能包含对其他列的引用   伪列CURRVAL,NEXTVAL ,LEVEL和ROWNUM,或日期常量   没有完全指定的。

     

表达式可以是除标量子查询表达式之外的任何形式。

您需要BEFORE INSERT触发器:

CREATE OR REPLACE TRIGGER some_name
BEFORE INSERT ON C_ORDER
FOR EACH ROW 
BEGIN
  :NEW.OrderNumber := ordernumber_seq.NEXTVAL;
END;
/