想实现ID自增,新建了sequence、trigger,如下:
create sequence t_skyquality_seq
minvalue 1
NOMAXVALUE 
increment by 1
start with 1
NOCYCLE
cache 20;CREATE or replace TRIGGER t_skyquality_trigger 
BEFORE INSERT ON t_skyquality FOR EACH ROW WHEN (new.id is null)
begin
        select t_skyquality_seq.nextval into: new.id from dual;
end;
在随便插入个数据时,就出现了“通信通道的文件结束”错误,最后pl/sql死掉。。

解决方案 »

  1.   

    CREATE or replace TRIGGER t_skyquality_trigger 
    BEFORE INSERT ON t_skyquality FOR EACH ROW)
    begin
          直接用t_skyquality_seq.nextval 替换new.id 不就可以了么,为什么要 select t_skyquality_seq.nextval into: new.id from dual;呢?
    end;
      

  2.   

    好像跟触发器没什么关系,你把触发器drop掉,再插入,是不是还有问题?
      

  3.   

    怎么“直接用t_skyquality_seq.nextval 替换new.id”
      

  4.   


    :new.id:=t_skyquality_seq.nextval;检查下alert_<SID>.log日志文件中是否存在ORA-07445错误。
      

  5.   

    出现错误“TRIGGER SZCRM.T_SKYQUALITY_TRIGGER 编译错误错误:PLS-00357: 在此上下文中不允许表, 视图或序列引用 'T_SKYQUALITY_SEQ.NEXTVAL'
    行:5
    文本::new.id:=t_skyquality_seq.nextval;错误:PL/SQL: Statement ignored
    行:5
    文本::new.id:=t_skyquality_seq.nextval;

    ”,不能这样用。。
      

  6.   

    select t_skyquality_seq.nextval into: new.id from dual;
    这句改成
    select t_skyquality_seq.nextval into :new.id from dual;
    注意冒号位置