rowid是伪列,指的是一条记录的物理地址!
oracle里的自增id:
SQL> create sequence a_sequence
  2  start with 1
  3  increment by 1;序列已创建。SQL> create table t (n number ,v varchar2(10));表已创建。SQL> create or replace trigger t_trg
  2  before insert or update on t
  3  for each row
  4  begin
  5    select a_sequence.nextval into :new.n from dual;
  6  end;
  7  /触发器已创建SQL> insert into t values(111,'ok');已创建 1 行。SQL> select *  from t;         N V
---------- ----------
         1 ok

解决方案 »

  1.   

    自增ID用不着rowidSQL> select rowid,a.* from a;ROWID              ID   ST C  D
    ------------------ ---- -- -- ----
    AAAA92AABAAADT0AAA 11   2  19 48
    AAAA92AABAAADT0AAB 12   2  29 58
    AAAA92AABAAADT0AAC 13   2  39 68SQL>
      

  2.   

    就只能这样吗?可以不用trigger 吗?多累,我有好多表,每个都加个Trigger是不是很累。。
      

  3.   

    当然可以不用触发器:
    SQL> create table test(
      2  col1 number(3),
      3  col2 varchar2(10));表已创建。SQL> create sequence seq_test
      2   start with 1
      3     increment by 1;序列已创建。SQL> insert into test values(seq_test.nextval,'aaa');已创建 1 行。
    SQL> insert into test values(seq_test.nextval,'bbb');已创建 1 行。SQL> select * from test;      COL1 COL2
    ---------- ----------
             1 aaa
             2 bbbSQL>