如题:
比如有一视图如下: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

解决方案 »

  1.   

    楼主可以自己解析 不过很麻烦
    根据视图的创建语句
    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写起来会很复杂,而且不稳定
      

  2.   

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