干吗去修改new.id, 用SEQUENCE不就得了吗,程序里指定插入语句用哪个SEQUENCE,每次都只增

解决方案 »

  1.   

    对,建立好了序列
    等到了向使用的时候可以在dual表中查找最大的序列号。
    select sequence_name.nextvar into youvar from dual
    即可。
      

  2.   

    有几次地方错,一、:new,:old只能在行级别有效
    二、new前加:
    三、end后没有分号CREATE OR REPLACE TRIGGER "TEST"."TTTT_MEME" 
    BEFORE INSERT ON "TEST"."MEME" 
    FOR EACH ROW
        declare
    ln number; 
    begin
    select max(id) into ln from MEME;
    :new.id=ln+1;
    end;
      

  3.   

    建义你还是用序列吧CREATE OR REPLACE TRIGGER "TEST"."TTTT_MEME" 
    BEFORE INSERT ON "TEST"."MEME" 
    FOR EACH ROW
        
    begin
    select sequence_id.nextval into :new.id from dual;
    end;
      

  4.   

    我改成序列也是报这个错呀:RA-04098: 触发器 'TEST.TTTT_MEME' 无效且未通过重新确认!
      

  5.   

    先建序列,再建触发器。
    create sequence S_text_ID increment by 1 shart with 1 maxvalues 999999999;
    CREATE OR REPLACE TRIGGER T_Text_ID
    BEFORE INSERT ON Text
    REFERENCING OLD AS old NEW AS new
    FOR EACH ROW
    BEGIN
      IF :new.ID IS NULL THEN
        SELECT S_text_ID.NEXTVAL
        INTO   :new.ID
        FROM   dual;
      END IF;
    END;
    /
      

  6.   

    CREATE OR REPLACE TRIGGER "TEST"."TTTT_MEME" 
    BEFORE INSERT ON "TEST"."MEME" 
    FOR EACH ROW
    xxx number;    
    begin
    select sequence_id.nextval into xxx from dual;
    :new.id := xxx;
    end;
    /
      

  7.   

    先建序列,再建触发器。
    create sequence S_text_ID increment by 1 shart with 1 maxvalues 999999999;
    CREATE OR REPLACE TRIGGER T_Text_ID
    BEFORE INSERT ON 表名
    REFERENCING OLD AS old NEW AS new
    FOR EACH ROW
    BEGIN
      IF :new.ID IS NULL THEN
        SELECT S_text_ID.NEXTVAL
        INTO   :new.ID
        FROM   dual;
      END IF;
    END;
    /