日期:2014-05-17  浏览次数:20827 次

一个触发器老是建立不对,帮看看,谢了
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的作用是什么,给我解释解释好吗?


------解决方案--------------------
如果你用sequence作为主键自增机制的话,那么对于例子的触发器你只需要改两个地方(红色粗体标注):
CREATE or replace TRIGGER "my_trigger" BEFORE 
INSERT ON my_table [color=#FF0000][/color]/*改为你的表名*/
FOR EACH ROW WHEN (new.id[color=#FF0000][/color] /*id改为你的主键pid*/is null) 
begin 
select my_sequence[b][/b].nextval/*my_sequence改为你的序列的名字*/
 into: new.id[b][/b]/*id改为你的主键pid*/ from dual; 
end; 

另into:不是一个整体,而是into :new.id。:new.id代表触发器后调用的记录行,:old代表触发器调用前的记录
触发器很简单,你需要看看它的基础知识