日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

plsql视图添加表字段_Oracle-单表多字段查询(不使用*)

發(fā)布時(shí)間:2025/3/8 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 plsql视图添加表字段_Oracle-单表多字段查询(不使用*) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。