CREATE OR REPLACE TRIGGER auto_id
before insert on CustomWord
for each row
declare
max_id number;
cur_seq number;
begin
if :new.table_id1, :new.table_id2, :new.table_id3, :new.table_id4 is null then
--HERE what should I get it? Something like tableid1 value = "it's ok"
end loop;
end if;
end;
/
我只想在用户在“table_id1”上获取空值时创建触发器,它的值自动更改,只插入“它没问题”。如何创建这样的?
答案 0 :(得分:1)
如果你真的想通过触发器(无论出于何种原因)来做,那就简单了:
CREATE OR REPLACE TRIGGER auto_id
before insert on CustomWord
for each row
begin
if :new.table_id1 is null then
:new.table_id1 := 'it''s ok';
end if;
end;
/
答案 1 :(得分:0)
另一种方法是在列上使用默认值:
create table CustomWord
...
table_id1 varchar2(30) default 'Ok',
...
而不是触发器。请注意,除非您具有可以使用DEFAULT ON NULL子句的Oracle 12c,否则需要在NULL
时省略INSERT语句中的列。
使用默认的null子句:
create table CustomWord
...
table_id1 varchar2(30) default on null 'Ok',
修改现有表格:
ALTER TABLE CustomWord MODIFY(table_id1 DEFAULT on null 'It''s ok');
但是,我建议不要插入“It is ok”字符串,因为最好将NULL值保持为可以接受的证据。应该根据值为空的事实做出人类可读的表示。