你可以建一个触发器,在对这个表进行insert和update的时候,统计表中的记录数,然后更新表中的记录数的那个字段!

解决方案 »

  1.   

    已经删除的记录的字段(这个字段是通过insert触发自增的字段),
    并没有减小,不知我说清楚了吗?
    我已经:(通过insert触发自增)
    Create Sequence id
    Start With 1
    Increment By 1;CREATE OR REPLACE TRIGGER admin_RIGGER
    BEFORE INSERT 
    ON admin FOR EACH ROW
    BEGIN
      SELECT id.NEXTVAL INTO :NEW.id FROM DUAL;
    END;
    /
    select * from admin;delete * from admin;insert into admin(userName,password,flag,lastLogin,lastLoginIP )
    values ('handsome3','1111','webmaser',to_date('2003-02-27','yyyy-mm-dd'),'223.1.05.6');
    但是当我删除当前记录后,插入新的一条记录时,
    我发现自增字段的数值并不是没有变小,仍是按照原来的大小在自增,
    而我的想法时要求他在删除后,字段再删除的基础上增加,
      

  2.   

    Create Sequence id_insert Start With 1 Increment By 1;
    Create Sequence id_delete Start With 1 Increment By 1;CREATE OR REPLACE TRIGGER admin_RIGGER_delete
    BEFORE DELETE
    ON admin FOR EACH ROW
    BEGIN
      SELECT id_delete.NEXTVAL FROM DUAL;
    END;
    /CREATE OR REPLACE TRIGGER admin_RIGGER_insert
    BEFORE INSERT 
    ON admin FOR EACH ROW
    BEGIN
      SELECT (id_insert.NEXTVAL - id_delete.NEXTVAL) INTO :NEW.id FROM DUAL;
    END;
    /
    --------------------------------------
    楼主是要这个吗?但是这个id也不可靠啊
      

  3.   

    序列是不会因增删而改变它的,即删除了记录,那么序列号就留有空决。那只能用一个数字型变量来记录当前ID
    CREATE OR REPLACE PACKAGE pkg_test
    AS
       num number:=1;
    END pkg_test;
    /create or replace trigger name_tri
    before insert or delete on table_name
    for each row 
    begin
    if inserting then
    select pkg_test.num into :new.id from dual;
    pkg_test.num:=pkg_test.num+1;
    else
    pkg_test.num:=pkg_test.num1-1;
    end if;
    end;
    /
      

  4.   

    1. 考虑这种情况,表中有id为1,2,3,4,5的记录,删除id=3的记录,你还需要序列递减吗?2.如果是 delete * from admin;,删除了表中的所有记录,那么你可以通过重建你的sequence来达到id从1开始重新编号的目的。drop sequence id;Create Sequence id
    Start With 1
    Increment By 1;若表中保留了id=1-3的记录,你也可以将Start With 1改为Start With 4,来达到目的。
      

  5.   

    我再说一句,没有必要使id类型的字段再具有其它的诸如可以统计记录数的含义,因为id就是id,只是一个唯一标识,不能再多赋予其更多的含义,否则,只能是作茧自缚。
      

  6.   

    同意  developer2002(开发者2002) 有很多人想出一些"怎样避免序列号跳值" "怎样使用sequence作为论坛ID"...解决办法,
    殊不知,这个sequence只能作为唯一ID,要想让他作别的用途,就再加一个列吧!