Oracle中一个TABLE1表,示例如下
字段1   字段2
aa      bb
cc      dd要求只知道表名字 TABLE1,并不知道具体表字段,怎么通过查询语句生成如下的结果?不要用存储进程,就是要SQL语句实现!查询结果是
aa_bb
cc_dd 我想到用SELECT COLUMN_NAME FROM USER_TAB_COLS where TABLE_NAME='TABLE1'获得表中的字段名,但是下一步怎么做?本人数据库初学,勿见笑

解决方案 »

  1.   

    建议存储过程实现很简单sql语句实现 难度很大,不好实现,等大神。
      

  2.   

    真的么?那就是不能一个超长SQL语句完成了。
      

  3.   


      对 如果是在pl/sql中直接写sql 肯定行不通的  必须要定义字段才行  所以只能在代码里面考虑了 sql肯定是要拼接的
      

  4.   

    这不可能  用 sql 能实现的。
      

  5.   

    oracle里面好像没有什么关键字来指代字段,比如table1.col1之类的
    不知道其他数据库有没有 
      

  6.   


      对 如果是在pl/sql中直接写sql 肯定行不通的  必须要定义字段才行  所以只能在代码里面考虑了 sql肯定是要拼接的请问要是SQL拼接,或者存储进程需要怎么写?
      

  7.   

    用存储过程的话
    --创建测试表
    create table table1 (c1 nvarchar2(10),c2 nvarchar2(10));
    insert into table1 values ('aa','bb');
    insert into table1 values ('cc','dd');
    commit;--创建存储过程
    CREATE OR REPLACE PROCEDURE TEST
    IS
      V_SQL NVARCHAR2(2000); 
      CURSOR CURSOR_1 IS
      SELECT COLUMN_NAME CN
      FROM USER_TAB_COLS 
      WHERE TABLE_NAME='TABLE1';
     
        BEGIN
          V_SQL := 'SELECT ';
          FOR V_TB IN CURSOR_1
          LOOP
            V_SQL := V_SQL || V_TB.CN || '||''_''||';
          END LOOP;
          V_SQL := SUBSTR(V_SQL,1,LENGTH(V_SQL)-7);
          V_SQL := V_SQL || ' FROM TABLE1' ;
         DBMS_OUTPUT.PUT_LINE(V_SQL);
        --EXECUTE IMMEDIATE V_SQL;
        END;--执行存储过程 打印的sql
    SELECT C1||'_'||C2 FROM TABLE1
      

  8.   


    DECLARE
        V_SQL VARCHAR(300);
    BEGIN
        SELECT 'SELECT ' || REPLACE(WMSYS.WM_CONCAT(T.COLUMN_NAME), ',', '||') ||
               ' FROM TABLE1 '
          INTO V_SQL
          FROM ALL_TAB_COLUMNS T
         WHERE TABLE_NAME = 'TABLE1' --AND OWNER='用户'
        --DBMS_OUTPUT.put_line(V_SQL);
        EXECUTE IMMEDIATE V_SQL;
    END;按你的描述这样写就OK了啊
      

  9.   


    SELECT COLUMN_NAME FROM USER_TAB_COLS where TABLE_NAME='TABLE1'查询出来的字段是值类型,不是字段,不能直接使用于T_SQL,只能通过变量来实现。方法可以有语句块或者存储过程