Oracle中无法为DEFAULT约束命名?需后续删除该约束
Oracle中设置可删除的字段默认值的正确方式
你遇到的问题是Oracle不支持用CONSTRAINT关键字为DEFAULT属性命名——DEFAULT属于列的基础属性,而非CHECK/PRIMARY KEY这类标准约束类型,所以你的写法违反了Oracle语法规则,才会抛出ORA-02253错误。
正确的建表语句
要设置默认值同时保留后续删除的能力,直接将DEFAULT作为列属性定义即可,无需为它添加CONSTRAINT命名:
CREATE TABLE Article( ArCode char(5) CONSTRAINT arcode_chk check(ArCode like 'A%') CONSTRAINT ar_code_pk primary key, ArName varchar2(20) CONSTRAINT ar_name_nn not null, Rate number(8,2), Quantity number(4) DEFAULT 0 CONSTRAINT qty_chk check(Quantity>=0), Classs char(1) CONSTRAINT cls_chk check(Classs in('A','B','C')) );
后续删除默认值的方法
由于DEFAULT是列属性,删除时不需要约束名,直接通过ALTER TABLE将列的默认值设为NULL即可(Oracle中无默认值等价于默认值为NULL):
ALTER TABLE Article MODIFY Quantity DEFAULT NULL;
验证默认值配置
如果需要确认列的默认值信息,可查询数据字典视图:
SELECT COLUMN_NAME, DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'ARTICLE' AND COLUMN_NAME = 'QUANTITY';
内容的提问来源于stack exchange,提问作者Mohd Gaming
相关产品推荐
相关产品推荐

