已经建立TESTTABLE_id_SEQ序列,
create sequence TESTTABLE_id_SEQ start with 1 minvalue 1;
CREATE OR REPLACE TRIGGER "TESTTABLE_ID_TRIG" BEFORE INSERT OR UPDATE ON TESTTABLE
FOR EACH ROW
DECLARE
v_newVal NUMBER(12) := 0;
v_incval NUMBER(12) := 0;
BEGIN
IF INSERTING AND :new.id IS NULL THEN
SELECT TESTTABLE_id_SEQ.NEXTVAL INTO v_newVal FROM DUAL;
IF v_newVal = 1 THEN
SELECT NVL(max(id),0) INTO v_newVal FROM TESTTABLE;
v_newVal := v_newVal + 1;
LOOP
EXIT WHEN v_incval>=v_newVal;
SELECT TESTTABLE_id_SEQ.nextval INTO v_incval FROM dual;
END LOOP;
END IF;
:new.id := v_newVal;
END IF;
END;