CREATE or replace TRIGGER "my_trigger" BEFORE
INSERT ON my_table FOR EACH ROW WHEN (new.id is null)
begin
select my_sequence.nextval into: new.id from dual;
end;
插入数据
INSERT INTO my_table(Name,phone,address) Values('Cao','56498543','Heibei');我想在ORACLE里面建立一个主键自增加的机制
上面的这触发器我不知道new.id是什么意思,我的表的主键叫pid,我应该怎么修改begin和end中间的语呢?
而且我也不明白into:和from dual的作用是什么,给我解释解释好吗?
INSERT ON my_table FOR EACH ROW WHEN (new.id is null)
begin
select my_sequence.nextval into: new.id from dual;
end;
插入数据
INSERT INTO my_table(Name,phone,address) Values('Cao','56498543','Heibei');我想在ORACLE里面建立一个主键自增加的机制
上面的这触发器我不知道new.id是什么意思,我的表的主键叫pid,我应该怎么修改begin和end中间的语呢?
而且我也不明白into:和from dual的作用是什么,给我解释解释好吗?
select my_sequence.nextval into: new.id from dual;
换成
select my_sequence.nextval into :new.id from dual;
就可以了。
new.id 是语句插入时id的值,如果没有明确写除就是NULL或缺省值。 new.id前面加冒号是指bind variable的意思。
select my_sequence.nextval into :new.id from dual; 是用my_sequence.nextval 给 new.id赋值。
dual是个虚拟的表,只有一行一列。通常是来源没有明确的表的时候用它来作源表。如取系统时间就是:select sysdate from dual;
CREATE or replace TRIGGER "my_trigger" BEFORE
INSERT ON my_table /*改为你的表名*/
FOR EACH ROW WHEN (new.id /*id改为你的主键pid*/is null)
begin
select my_sequence.nextval/*my_sequence改为你的序列的名字*/
into: new.id/*id改为你的主键pid*/ from dual;
end; 另into:不是一个整体,而是into :new.id。:new.id代表触发器后调用的记录行,:old代表触发器调用前的记录
触发器很简单,你需要看看它的基础知识