欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql语句高分求解,一个看似简单的有关问题

更新时间: 2014-01-05 02:10:18 责任编辑: Author_N1

 

SQL语句高分求解,一个看似简单的问题?
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'获得表中的字段名,但是下一步怎么做?本人数据库初学,勿见笑
--参考方法--
用存储过程的话


--创建测试表
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

--参考方法--

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了啊
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6476/
本文WWW.DOC100.NET DOC100.NET版权所有。