本帖最后由 czmchen 于 2011-06-10 10:06:16 编辑

解决方案 »

  1.   

    不建表,你的test表从那儿来?
    ORACLE数据字典那来你的表结构定义?
      

  2.   

    test表是从其他数据库过来的insert into tablexxx  (column1,column2,column3) from select t.column1,t.column2,t.column3 from test基于上面的插入语句的需求,想获取column1,column2,column3的位置,因为tablexxx的表字段和select过来的表字段顺序不同。
      

  3.   


    SQL> desc emp;
    Name     Type         Nullable Default Comments 
    -------- ------------ -------- ------- -------- 
    EMPNO    NUMBER(4)                              
    ENAME    VARCHAR2(10) Y                         
    JOB      VARCHAR2(9)  Y                         
    MGR      NUMBER(4)    Y                         
    HIREDATE DATE         Y                         
    SAL      NUMBER(7,2)  Y                         
    COMM     NUMBER(7,2)  Y                         
    DEPTNO   NUMBER(2)    Y                         
     
    --构造一个表,和emp表的部分字段相同,但是顺序不同
    SQL> create table t_emp as
      2  select ename,empno,deptno,sal
      3  from emp
      4  where 1=0
      5  /
     
    Table created
     --添加数据
    SQL> insert into t_emp(ename,empno,deptno,sal)
      2  select ename,empno,deptno,sal
      3  from emp
      4  where sal >= 2500 
      5  /
     
    5 rows inserted
     
    SQL> select * from t_emp;
     
    ENAME      EMPNO DEPTNO       SAL
    ---------- ----- ------ ---------
    JONES       7566     20   2975.00
    BLAKE       7698     30   2850.00
    SCOTT       7788     20   3100.00
    KING        7839     10   5000.00
    FORD        7902     20   3000.00
     
    SQL> select * from emp;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20
     7499 ALLEN      SALESMAN   7698 1981-02-20    1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-02-22    1250.00    500.00     30
     7566 JONES      MANAGER    7839 1981-04-02    2975.00               20
     7654 MARTIN     SALESMAN   7698 1981-09-28    1250.00   1400.00     30
     7698 BLAKE      MANAGER    7839 1981-05-01    2850.00               30
     7782 CLARK      MANAGER    7839 1981-06-09    2450.00               10
     7788 SCOTT      ANALYST    7566 1987-04-19    3100.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7844 TURNER     SALESMAN   7698 1981-09-08    1500.00      0.00     30
     7876 ADAMS      CLERK      7788 1987-05-23    1100.00               20
     7900 JAMES      CLERK      7698 1981-12-03     950.00               30
     7902 FORD       ANALYST    7566 1981-12-03    3000.00               20
     7934 MILLER     CLERK      7782 1982-01-23    1300.00               10
     
    14 rows selected
      

  4.   

    你的tablexxx 与test表字段名称一致?
      

  5.   

    哈哈,原来有 desc table这样的写法~~~
      

  6.   

    是和test表字段是一样的,可是test查询字段的顺序可能不同好像tablexxx ,表字段顺序是
    column1,column2,column3
    可是select过来的字段可能是这样子
    select t.column2,t.column1,t.column3 from testso,用insert into tablexxx 要指定插入的字段,我想把这些都是程序自动去做,不是认为去做
      

  7.   

    可是select过来的字段可能是这样子
    select t.column2,t.column1,t.column3 from test如果能确定这个sql的格式没有大的变化 你可以截取啊 把select和from中间的部分取出来 再把表名.列名中.前边的去掉 列名就出来了
      

  8.   

    select  '' column1, '' column2, '' column3 from dual
      

  9.   

    desc cat;
    /*或者:*/
    desc tab;TNAME是表名。
      

  10.   

    select s.COLUMN_NAME from user_tab_columns s where s.TABLE_NAME='TEST1'这个sql的意思是说查询这个表的字段名称,那么我想在查询的sql中获取字段名称好像select t.column2,t.column1,t.column3 from test这个查询语句,我想获取column2,column1,column3的字段名称,不通过对象查询(因为我这个查询语句可以是多表查询)。
      

  11.   

    如果知道表名,可以重系统字典表中查找列名,然后动态拼接SQL,如:SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME = 'TEST';PS:不要砭低别人,多从自己身上找原因。
      

  12.   


    效果不是通过表名来获取这些字段名,是通过查询SQL获取字段名称
    PS:不要砭低别人,多从自己身上找原因。不好意思,话说得有点锋
      

  13.   

    SQL> set serveroutput on;
    SQL> 
    SQL> DECLARE
      2    v_sql VARCHAR2(2000);
      3    v_col VARCHAR2(2000);
      4  BEGIN
      5    v_sql := 'select col1,col2,col3 from test';
      6    v_sql := trim(v_sql);
      7    v_col := regexp_replace(regexp_replace(regexp_substr(
      8             'select col1,col2,col3 from test','^select.+from',1,1,'i')
      9             ,'select','',1,1,'i'),'from','',1,1,'i');
     10    dbms_output.put_line(v_col);
     11  END;
     12  /
     
     col1,col2,col3 
     
    PL/SQL procedure successfully completed