在建表时,创建字段key,自己创建了一个自增序列作为字段key的内容。但是每次调度运行后key的内容都会发生改变,有没有什么办法可以让原有的key的内容不变,同时插入新的记录时key又自动增加新的内容

解决方案 »

  1.   

    select 
    (序列名)seq.nextval as key,
    T.code
      from T (表名); 这样,每次在PL/SQL中run一次后,key的内容都会发生改变,但是code不发生改变。需要每次运行后key的内容都不发生改变,请问应该怎么处理?
      

  2.   

    不要使用序列。
    select rownum key , code from t 或select row_number() over(order by code) key , code from t 
      

  3.   

    可是,如果使用行数作为key值,那么当code的顺序发生改变后,code对应的key值也会发生改变
      

  4.   


    是会改变的,如果不想改变,只能再加一列,把这个 key 存到表中。
      

  5.   


    是会改变的,如果不想改变,只能再加一列,把这个 key 存到表中。
    那么这需要修改表结构吗?应该怎么进行操作
      

  6.   

    -- 使用触发器SQL> 
    SQL> create table test(key int, code varchar(10));
    Table created
    SQL> create sequence seq_test;
    Sequence created
    SQL> create trigger tri_test_id
      2  before insert on test
      3  for each row
      4  begin
      5      :new.key := seq_test.nextval;
      6  end;
      7  /
    Trigger created
    SQL> begin
      2      insert into test(code) values('zhao');
      3      insert into test(code) values('qian');
      4      insert into test(code) values('sun');
      5      insert into test(code) values('li');
      6  end;
      7  /
    PL/SQL procedure successfully completed
    SQL> select * from test ;
                                        KEY CODE
    --------------------------------------- ----------
                                          1 zhao
                                          2 qian
                                          3 sun
                                          4 li
    SQL> drop table test purge;
    Table dropped
    SQL> drop sequence seq_test;
    Sequence droppedSQL> 
      

  7.   

    currval返回当前的sequence值
    nextval返回增值后的sequence值
      

  8.   

    有没有什么办法可以让原有的key的内容不变,同时插入新的记录时key又自动增加新的内容
    如果KEY存储了,那查询的时候原来的key内容肯定不变了。