SQL 获取oracle视图的列名以及列名对应的表名

时间:2021-11-12 07:39:39
如题:
比如有一视图如下:

CREATE OR REPLACE VIEW V_TEST AS
SELECT A.C, A.D, A.E, B.F.B.G, B.H 
  FROM A_TEST A, B_TEST B;


c,d,e属于TEST 表,f,g,h 属于b_test表,

能否得到V_TEST 视图的所有列名及列名对应的表名。

  希望的结果:
  
   表名     列名
   A_TEST   C
   A_TEST   D
   A_TEST   E
   B_TEST   F
   B_TEST   G
   B_TEST   H

7 个解决方案

#1


貌似没办法

#2


为什么会要这样的需求呢?
你可以通过查看视图创建的语句就知道哪些列来自哪些表嘛

#3


想自动把视图和表的列插入到一张表中,做报表用

#4


楼主可以自己解析 不过很麻烦
根据视图的创建语句
SELECT A.C, A.D, A.E, B.F.B.G, B.H 
  FROM A_TEST A, B_TEST B;
先把from 和where之间的字符串取出来,并根据逗号分隔,再根据空格分隔,防止有重命名的表,这样可以把表名取出来
再把select 和 from之间的字段以逗号分隔,还要判断有没有as重命名,然后根据字段前的表别名找到字段所属的表,没有重名名的就要查一下属于哪个表
我感觉,这个sql写起来会很复杂,而且不稳定

#5


这个需求有点怪
自己写代码解析吧

#6


该回复于2011-01-27 09:03:16被版主删除

#7


select COLUMN_NAME FROM user_col_comments WHERE TABLE_NAME='视图名' 
select COLUMN_NAME from all_tab_columns WHERE TABLE_NAME='视图名' 

#1


貌似没办法

#2


为什么会要这样的需求呢?
你可以通过查看视图创建的语句就知道哪些列来自哪些表嘛

#3


想自动把视图和表的列插入到一张表中,做报表用

#4


楼主可以自己解析 不过很麻烦
根据视图的创建语句
SELECT A.C, A.D, A.E, B.F.B.G, B.H 
  FROM A_TEST A, B_TEST B;
先把from 和where之间的字符串取出来,并根据逗号分隔,再根据空格分隔,防止有重命名的表,这样可以把表名取出来
再把select 和 from之间的字段以逗号分隔,还要判断有没有as重命名,然后根据字段前的表别名找到字段所属的表,没有重名名的就要查一下属于哪个表
我感觉,这个sql写起来会很复杂,而且不稳定

#5


这个需求有点怪
自己写代码解析吧

#6


该回复于2011-01-27 09:03:16被版主删除

#7


select COLUMN_NAME FROM user_col_comments WHERE TABLE_NAME='视图名' 
select COLUMN_NAME from all_tab_columns WHERE TABLE_NAME='视图名'