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:这里不允许列
答案 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;
/