+ -
当前位置:首页 → 问答吧 → 单条 select 嵌套动态查询

单条 select 嵌套动态查询

时间:2011-09-06

来源:互联网

兄弟们,讨论下,要实现类似的功能,

select 'select table_name,column_name from all_tab_cols where owner='''||upper(user)||'''' from dual ;

目的是返回当前用户的所有表的所有字段,以上写法肯定不行,不知道大家有啥好的写法?

作者: wujiandao2   发布时间: 2011-09-06

用all_tab_cols拼啊,不要用dual拼

作者: dingjun123   发布时间: 2011-09-06

恩,用select table_name, column_name from all_tab_cols可以出的来,我的本意其实是,在select这单条语句中,可以实现动态语句的功能,也就是执行通过字符拼接起来的select语句。
比如我在HR这个schema下,只有一个table,这个table 是这样定义的:
create table Employee( Emp_Id varchar2(4), Emp_Name varchar2(20));

我用单条select语句,实现:
select table_name, column_name,
           select ''''||column_name||'''' as column_name_value from Employee
from user_tab_cols;

输出结果是:
Employee      Emp_Id         001
Employee      Emp_Name    dingjun

但是上面的语句达不到这样的效果咧。求解?
(我这里假设只有一条记录,如果记录多的话,可以用wmsys.wm_concat(在你的书里看到的,嘿嘿))

作者: wujiandao2   发布时间: 2011-09-06



QUOTE:原帖由 wujiandao2 于 2011-9-6 10:23 发表
恩,用select table_name, column_name from all_tab_cols可以出的来,我的本意其实是,在select这单条语句中,可以实现动态语句的功能,也就是执行通过字符拼接起来的select语句。
比如我在HR这个schema下,只有一个table,这个table 是这样定义的:
create table Employee( Emp_Id varchar2(4), Emp_Name varchar2(20));

我用单条select语句,实现:
select table_name, column_name,
           select ''''||column_name||'''' as column_name_value from Employee
from user_tab_cols;

输出结果是:
Employee      Emp_Id         001
Employee      Emp_Name    dingjun

但是上面的语句达不到这样的效果咧。求解?
(我这里假设只有一条记录,如果记录多的话,可以用wmsys.wm_concat(在你的书里看到的,嘿嘿))



是不是如下的意思? 如有问题再问题说详细点!

SQL> select * from employee;

EMP_ID EMP_NAME
------ ------------
7369   SMITH
7499   ALLEN
7521   WARD
7566   JONES
7654   MARTIN
7698   BLAKE
7782   CLARK
7788   SCOTT
7839   KING
7844   TURNER
7876   ADAMS
7900   JAMES
7902   FORD
7934   MILLER

14 rows selected

SQL>
SQL> select b1.table_name,
  2         b1.column_name,
  3         decode(b1.column_name,
  4                a1.flag1,
  5                a1.emp_id_val,
  6                a1.flag2,
  7                a1.emp_name_val) col_val
  8    from (select 'EMP_ID' flag1,
  9                 'EMP_NAME' flag2,
10                 wmsys.wm_concat(emp_id) emp_id_val,
11                 wmsys.wm_concat(emp_name) emp_name_val
12            from employee) a1,
13         (select table_name, column_name
14            from user_tab_cols
15           where user_tab_cols.table_name = 'EMPLOYEE') b1
16  /

TABLE_NAME                     COLUMN_NAME                    COL_VAL
------------------------------ ------------------------------ --------------------------------------------------------------------------------
EMPLOYEE                       EMP_ID                         7369,7499,7521,7566,7654,7698,7782,7788,7839,7844,7876,7900,7902,7934
EMPLOYEE                       EMP_NAME                       SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL

SQL>



作者: bell6248   发布时间: 2011-09-06

热门下载

更多