create or replace trigger UserInfoTrigger
after insert on ms_userinfo
referencing New as new_value Old as old_value
for each row
declare
v_roleidtemp number;
begin
     select id into v_roleidtemp from ms_roleinfo where rolename=:old_value.rolename;
     insert into ms_userinfo (password,roleid) values(888888,v_roleidtemp);
end;我有两个表 ,一个是用户表 字段为 ID ,用户名,密码,角色id,角色名
另外一个表为角色表  字段为 角色id,角色名我写的这个触发器的想法是 ,当用户表的角色名插入一个值,就根据角色表找到相对应的角色ID,插入用户表的角色ID中,
然后密码字段自动插入‘888888’
现在运行触发器没有问题,但是当给用户表做插入操作时,
这一句 “select id into v_roleidtemp from ms_roleinfo where rolename=:old_value.rolename;”
提示“找到不到数据”,请大侠帮忙看看,万分感谢

解决方案 »

  1.   

    你把值带进去查询下是否存在ID啊:select id into v_roleidtemp from ms_roleinfo where rolename=:old_value.rolename;
    如果不存在,就会存在no_data_found异常
      

  2.   


    --给你改了下:
    create or replace trigger UserInfoTrigger
    before insert on ms_userinfo
    for each row
    declare
    v_roleidtemp number;
    begin
      select id into v_roleidtemp from ms_roleinfo where rolename=:NEW.rolename;
      :NEW.password:=888888;
      :NEW.roleid :=v_roleidtemp;
    exception when others then
      null ;
    end;
      

  3.   

    insert into ms_userinfo (password,roleid) values(888888,v_roleidtemp);
    -------->
    :new_value.roleid :=v_roleidtemp;你这里的insert应该是这个意思吧?要不这里又insert,又触发一边trigger,不是刚好没有rolename的值吗?
      

  4.   

    谢谢 crazylaa 和 gelyon
    万分感谢