就看你的序列是向上增长还是向下递减的
向上增长,求该表中那个字段的最大值
select max(col1) from table1;
向下递减,求该表中那个字段的最小值
select min(col1) from table1;

解决方案 »

  1.   

    那么这要写成一个事务了,因为如何在执行插入操作和选择时不能插入其它数据咯!
    再有如果序列是循环值的话这个方法就不行了。在写TRIGLE的时候,我注意到插入新行用的是NEW.SOMEID,在普通的选择中有什么关键字可以引用到刚插入的新行呢?still waiting...
      

  2.   

    在触发器中不能直接引用序列值,
    建议做一个存储过程:
    创建序列:
    create sequence test
    increment by 1
    start with 1
    maxvalue 999999
    引用序列值:
    insert into table_name(col1,col2,col3...)
    values(test.nextval,value1,value2,value3...)
    其中的“test.nextval”即为引用的序列值。
    然后把上面的插入语句放入存储过程中。
      

  3.   

    这还不简单,直接调用序列.nextval即可
      

  4.   

    谢谢以上的朋友!
    不过我更想知道有没有方法引用到新插入行的关键字。例如有表t(c1,c2,c3),新插入行后想取得任何一个字段只需要用“关键字”.c1等。或者有其它的手段,我遇到的情况是,程序执行了一个插入的SQL语句,而我只知道刚才SQL语句插入了一行新数据,而表中有一个字段(ID)是通过序列生成的,现在我要得到它!
    How to..., please!waiting...
      

  5.   

    你在你的trigger中,先将序列的nextval赋给一个变量,再把变量值插入到表的id字段
    变量值目前保存的就是你当前插入的ID值不知是否可行,也许是我没明白你的意思
      

  6.   

    CREATE SEQUENCE USERID INCREMENT BY 1 START WITH 1 
        MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
        NOCACHE NOORDER;CREATE OR REPLACE TRIGGER USERADD
    BEFORE INSERT ON MEMBERRG
    FOR EACH ROW
    BEGIN
        SELECT LPAD(USERID.NEXTVAL,4,'0') INTO :NEW.NUM FROM DUAL;
    END;
      

  7.   

    使用dbms_output包吧,dbms_output.putline("aa");这样就可以把数据放到缓存区了。
      

  8.   

    真的没有别的办法实现了吗,在MSSQL中有个全局变量,@@IDENTITY,可以取得上次插入的新行值。
    我遇到的问题是,某个方法执行了一个INERT语句,插入了一行,我不可能去重写这个方法,也不可能把这个方法的SQL语句打开看看,我现在要取得这刚刚插入的行的某个字段的值,这个值是通过某个序列生成的。
    不过取得了这个行也就能取得该行的所有字段了,好了,如何取得此行?You are welcome!!!
      

  9.   

    解决问题有两个途径: 
    1.在插入记录时将该值记录下来,放到全局变量或表中.估计这不是你需要的.
    2.取得最后插入的行.对ORACLE而言你可以通过判断ROWID来确定最后行.但这样对
    分区表是否适用就不清楚了.即select a from table where rowid=(select max(rowid) from table).
      

  10.   

    ROWID来确定最后行???  不可以的
    你可以考虑把 insert 的行的数值写入包中
      

  11.   

    即然知道序列USERID ,可以在insert 后,select userid.curval from dual 出来
      

  12.   

    最简单的办法是在插入语句的最后加一个关键字returning 字段名 into 变量名