SQL Developer执行ALTER TABLE报ORA-01735错误及字段约束问题咨询
问题1:ALTER TABLE执行失败的原因
你遇到的ORA-01735错误(你写的RA-01735为笔误)的核心原因是Oracle ALTER TABLE ADD 语法结构错误:
你当前的写法将CHECK约束放在了ADD子句的字段定义括号外部,Oracle会将该CHECK关键字识别为ALTER TABLE的顶级可选参数,而非新增字段的关联约束,因此判定为无效选项触发报错。
问题2:保证isActive值为大写TRUE/FALSE的实现方案
可以通过「CHECK约束+触发器」的组合方案实现,也可以根据需求单独使用约束:
方案1:仅用CHECK约束限制合法值
如果只需要限制输入的有效值(输入小写会直接报错),可以在定义字段时直接绑定带UPPER()转换的CHECK约束,正确的建字段语句如下:
ALTER TABLE COMPANY.CUSTOMER ADD ( isActive VARCHAR2(5 CHAR) DEFAULT 'FALSE' NOT NULL, CONSTRAINT chk_customer_isactive CHECK (UPPER(isActive) IN ('TRUE', 'FALSE')) );
注:原字段定义的VARCHAR2(18)长度冗余,TRUE/FALSE最长为5字符,调整为VARCHAR2(5)更节省存储空间
方案2:CHECK约束+触发器自动转大写
如果希望用户输入小写的true/false也能正常写入、自动转为大写存储,可以额外增加一个行级触发器:
CREATE OR REPLACE TRIGGER trg_customer_isactive_upper BEFORE INSERT OR UPDATE OF isActive ON COMPANY.CUSTOMER FOR EACH ROW BEGIN :NEW.isActive := UPPER(:NEW.isActive); END; /
触发器会在写入和更新字段前自动把值转为大写,配合CHECK约束即可100%保证存储的值只有大写的TRUE和FALSE两种。
内容的提问来源于stack exchange,提问作者happytohelp
相关产品推荐
相关产品推荐

