有一表ggss ,在其插入一条记录后,自动在uploads表内增加一条记录,但是要根据ggss这条记录的一个外键找到另一个表rwdxx中的type字段,取出后根据值判断将固定数据插入到uploads里。我是这么写的,但是提示错误,大家帮看一下怎么改create or replace trigger INSERT_UPLOADS after insert on ggss
for each row
declare
pid number(1);--定义两个变量
ghdw varchar2(200);
begin
select r.rwdlx into pid from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid ;--在这行提示错误,不知道可不可以用=:new.ggssid 做为条件,也不知道这么写对不对
if(pid=0 ) then
ghdw:='类型A';
end if;
if(pid=1) then
ghdw:='类型B';
end if;
if(pid=2) then
ghdw:='类型C';
end if;
INSERT INTO UPLOADS(inspectid,Glscc,Fgscc)VALUES (:NEW.GGSSID,ghdw,:NEW.scsj);
end INSERT_UPLOADS;
for each row
declare
pid number(1);--定义两个变量
ghdw varchar2(200);
begin
select r.rwdlx into pid from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid ;--在这行提示错误,不知道可不可以用=:new.ggssid 做为条件,也不知道这么写对不对
if(pid=0 ) then
ghdw:='类型A';
end if;
if(pid=1) then
ghdw:='类型B';
end if;
if(pid=2) then
ghdw:='类型C';
end if;
INSERT INTO UPLOADS(inspectid,Glscc,Fgscc)VALUES (:NEW.GGSSID,ghdw,:NEW.scsj);
end INSERT_UPLOADS;
这个语句先要判断 select count(*) into v_count from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid ;if v_cout > 0 then
select r.rwdlx into pid from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid ;
if(pid=0 ) then
ghdw:= '类型A ';
end if;
if(pid=1) then
ghdw:= '类型B ';
end if;
if(pid=2) then
ghdw:= '类型C ';
end if;
INSERT INTO UPLOADS(inspectid,Glscc,Fgscc)VALUES (:NEW.GGSSID,ghdw,:NEW.scsj);
end if;
如果v_count 不大于0,那条sql就会触发一个异常.
总之呢,用select fieldname into v_fieldname from tablename where ....
这样的语句一定要确保一定能查到数据,并且只能有一条数据。
select count(*) into v_count from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid; 在执行这条语句的时候报错,我已经定义了v_count number ;是什么原因呢?
ora -06512:在表"insert_uploads",line 6
ora-04088 触发器 "insert_uploads"执行过程中出错第6行就是select count(*) into v_count from ggss g,rwdxx r where r.rwdid=g.rwdid and g.ggssid=:new.ggssid;
Oracle的触发器里面,不可以参照自己的更新表,所以才有这个错误。
其实,你可以用old里面的值呀,你只是想确认rwdxx的表的数据呀。对吧。不需要把要更新的ggss拖进来吧。
new和old里面都有所有的字段值的。
create or replace trigger INSERT_UPLOADS
after insert on ggss
for each row
declare
pid number(1);
v_count number;
ghdw varchar2(200);
begin
select count(*) into v_count from rwd r where r.rwdid=:new.rwdid ;
if v_count > 0 then select r.rwdlx into pid from rwd r where r.rwdid=:new.rwdid ;
if(pid=0 ) then
ghdw:='A';
end if;
if(pid=1) then
ghdw:='B';
end if;
if(pid=2) then
ghdw:='C';
end if;
INSERT INTO UPLOADS(inspectid,Glscc,Fgscc)VALUES (:NEW.GGSSID,ghdw,:NEW.scsj);
end if;
end INSERT_UPLOADS;