小弟最近刚接触Oracle,写触发器的时候遇到了一个问题。我要在插入一行数据的时候,把将要插入的数据中的一个字段(bbid),修改为指定的id。下面是我写的触发器
CREATE OR REPLACE TRIGGER 
"SBGIS"."ELECLINE_10KVBROWSE_ADD" BEFORE
INSERT ON "SBGIS"."ELECLINE_10KVBROWSE" FOR EACH ROW declare 
maxid int;
begin
SELECT MAX(bbid) into maxid FROM Elecline_10kvBrowse;
IF(maxid<100 or maxid IS NULL ) then
maxid := 100;
END IF;
:new.bbid := maxid+1; 
end ELECLINE_10KVBROWSE_ADD;但是编译的时候系统总是提示“索引中丢失in或out参数”,后来我发现只要触发器中使用了“:new”就会提示这个错误。诸位大虾,哪位知道是怎么回事? 应该怎么解决?多谢了!

解决方案 »

  1.   

    create table t(id number);
    create or replace trigger tri_t 
    before insert on tuner.t for each row
    declare
    maxid integer;
    begin
         select max(id) into maxid from t;
         if (maxid<100 or maxid is null )then 
            maxid:=100;
         end if ;
         :new.id:=maxid+1;
    end;
    SQL> insert into t values(1);已创建 1 行。SQL> select * from t;        ID
    ----------
           101SQL>
    SQL>
    SQL> commit;提交完成。SQL>
    SQL> create index idx_t on t(id);索引已创建。SQL>
    SQL>
    SQL> insert into t values(1);已创建 1 行。SQL> select *from t;        ID
    ----------
           101
           102SQL>与trigger无关,检查你下的表吧,