plsql视图添加表字段_Oracle-单表多字段查询(不使用*)
環(huán)境:Oracle 11g,plsql 14
目的:不使用*,查詢擁有上百個(gè)字段的表的所有字段。
懶人大法:在文章末尾。
sql實(shí)現(xiàn)邏輯:
1、首先建一張100個(gè)字段以上的表,通過(guò)excel的方式將表建好后直接復(fù)制粘貼到plsql的建表界面。
利用excel快速建表
復(fù)制粘貼到PLSQL中,建表test1完成。
2、首先,我們需要獲取TEST1表的字段及注釋,通過(guò)Oracle中自帶的表,user_tab_columns a和user_col_comments,這兩張表中存儲(chǔ)著這個(gè)賬號(hào)下所有的表的字段名、字段順序及注釋。
select a.column_id xh, a.table_name, lower(a.column_name) dm, b.COMMENTS mc
from user_tab_columns a, user_col_comments b
where a.TABLE_NAME = 'TEST1'
AND a.TABLE_NAME = b.TABLE_NAME
and a.COLUMN_NAME = b.COLUMN_NAME
order by a.column_id
獲取出字段順序,表名,字段名及注釋。
4、通過(guò)case when語(yǔ)句進(jìn)行處理,如在第一行添加select,最后一行添加from及表名,其他行添加尾部逗號(hào),同時(shí),將字段及字段注釋合并。
select case
when xh = '1' then
'select ' || dm || ', ' || '/*' || mc || '*/'
when xh = (select max(column_id)
from user_tab_columns aa
where aa.table_name = c.table_name) then
dm || ' ' || '/*' || mc || '*/' || 'from ' ||
c.table_name
else
dm || ', ' || '/*' || mc || '*/'
end val,
xh
from (select a.column_id xh,
a.table_name,
lower(a.column_name) dm,
b.COMMENTS mc
from user_tab_columns a, user_col_comments b
where a.TABLE_NAME = 'TEST1'
AND a.TABLE_NAME = b.TABLE_NAME
and a.COLUMN_NAME = b.COLUMN_NAME
order by a.column_id) c
對(duì)字段名及字段注釋進(jìn)行處理
5、最終處理。將各行利用listagg() within group (order by)函數(shù)進(jìn)行合并處理。
select listagg(d.val, '') within group(order by xh) sql1
from (select case
when xh = '1' then
'select ' || dm || ', ' || '/*' || mc || '*/'
when xh = (select max(column_id)
from user_tab_columns aa
where aa.table_name = c.table_name) then
dm || ' ' || '/*' || mc || '*/' || 'from ' ||
c.table_name
else
dm || ', ' || '/*' || mc || '*/'
end val,
xh
from (select a.column_id xh,
a.table_name,
lower(a.column_name) dm,
b.COMMENTS mc
from user_tab_columns a, user_col_comments b
where a.TABLE_NAME = 'TEST1'
AND a.TABLE_NAME = b.TABLE_NAME
and a.COLUMN_NAME = b.COLUMN_NAME
order by a.column_id) c) d
6、將sql從查詢結(jié)果復(fù)制粘貼到新的sql窗口,使用plsql美化器美化后即可得到單表多字段查詢的sql了。
懶人大法:不用管如何實(shí)現(xiàn)的,直接把下列sql中的TEST1替換為你需要的表名即可查詢。注意:如果表上沒(méi)有注釋,會(huì)造成注釋處為/**/。
select listagg(d.val, '') within group(order by xh) sql1
from (select case
when xh = '1' then
'select ' || dm || ', ' || '/*' || mc || '*/'
when xh = (select max(column_id)
from user_tab_columns aa
where aa.table_name = c.table_name) then
dm || ' ' || '/*' || mc || '*/' || 'from ' ||
c.table_name
else
dm || ', ' || '/*' || mc || '*/'
end val,
xh
from (select a.column_id xh,
a.table_name,
lower(a.column_name) dm,
b.COMMENTS mc
from user_tab_columns a, user_col_comments b
where a.TABLE_NAME = 'TEST1'
AND a.TABLE_NAME = b.TABLE_NAME
and a.COLUMN_NAME = b.COLUMN_NAME
order by a.column_id) c) d
總結(jié)
以上是生活随笔為你收集整理的plsql视图添加表字段_Oracle-单表多字段查询(不使用*)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 跳蚤叮咬和蚊子叮咬的区别是什么
- 下一篇: 美国款游戏计算机,美国一程序员设计计算机