单条 select 嵌套动态查询
时间:2011-09-06
来源:互联网
兄弟们,讨论下,要实现类似的功能,
select 'select table_name,column_name from all_tab_cols where owner='''||upper(user)||'''' from dual ;
目的是返回当前用户的所有表的所有字段,以上写法肯定不行,不知道大家有啥好的写法?
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(在你的书里看到的,嘿嘿))
比如我在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(在你的书里看到的,嘿嘿))
恩,用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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28