环境:oracle 11g比如创建一表:
create table t_personer
(
name char(10) not null,
age numberl not null,
tel char(20) not null,
addr varchar2(100) not null,
constraint pk_personer primary key(name)
);在对各列属性未作任何修改的情况下,通过sql:select COLUMN_NAME from user_tab_columns where TABLE_NAME = ‘personer’,可依次获得列名“name,age,tel,addr”,此时按照列生成顺序。
当我对列addr做了一些修改后,比如修改类型为varchar2(200),此时再运行sql:[u]select COLUMN_NAME from user_tab_columns where TABLE_NAME = ‘personer’,获得的列名顺序是“addr,name,age,tel”,即将最新更新的列名排在最前面。查看表user_tab_columns的属性有“COLUMN_ID”和“LAST_ANALYZED”,但当列名属性被修改时这两项都会改变,如果有知道的xdjm请告知一下我该如何才能在列名属性被修改过的情况下还能按照生成顺序依次取到表中的所有列名,谢谢!

解决方案 »

  1.   


    SELECT COLUMN_NAME FROM User_Tab_Columns s WHERE TABLE_NAME = 'PERSONER' ORDER BY column_id;
      

  2.   

    谢谢2楼,不过这个方法我也尝试过,不过还是不行,比如刚创建表时列名和column_id对应关系是:
    name   1
    age    2
    tel    3
    addr   4加入修改了age之后,对应关系变成:
    name   1
    tel    2
    addr   3
    age    4所以此时取到的顺序还是不符合创建时的顺序,主要是oracle有没有哪里保存了这些列的创建时间?(按照创建时间排序应该是可行的),继续在线等~~~
      

  3.   

    修改(modify)列属性不可能改变COLUMN_ID的。
    除非drop column然后add column才会改变column_id;如果是这样就没有办法了。