【发布时间】:2021-12-11 08:13:03
【问题描述】:
我有一个包含以下列的客户表:
CREATE TABLE customers
(
customer_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 320
PRIMARY KEY,
name VARCHAR2( 255 ) NOT NULL,
address VARCHAR2( 255 ) ,
website VARCHAR2( 255 ) ,
credit_limit NUMBER( 8, 2 ) ,
isActive VARCHAR2(20) /*values are either TRUE or FALSE(default)*/
);
这个表中已经有很多记录了,现在我想写一个触发器,所以当插入一个新的客户行时,isActive应该默认为FALSE。
我做了这样的事情:
CREATE or REPLACE TRIGGER "UPDATE_ACTIVE_STATUS" BEFORE INSERT ON CUSTOMERS
FOR EACH ROW
when (NEW.CUSTOMER_ID > 0)
BEGIN
UPDATE CUSTOMERS set NEW.ISACTIVE = 'FALSE';
dbms_output.put('updated flag: ' || new.ISACTIVE);
END;
但我收到以下错误:
Error: SQL statement ignored
Error: ORA-00904: NEW.ISACTIVE invalid identifier
Error: NEW.ISACTIVE must be declared
我只是想在插入之前为isActive 列设置默认值,但无法成功。还想看看我是否需要添加任何其他验证。
感谢任何帮助。
【问题讨论】:
-
:新而不是新
-
我已将所有新内容更新到 :New 并获得
invalid use of bind variable in trigger when clause -
为什么是触发器?你可以
alter table customers modify inactive default on null 'FALSE'。尽管'TRUE'和'FALSE'似乎是代表'Y'和'N'的冗长方式。 -
在我的回答中也指出了这一点。但是,尚不清楚@happytohelp 究竟试图实现什么。如果野外已经有一些插入“TRUE”的代码,并且他们需要覆盖它,那么默认值没有帮助