如下面的sql
select *
  from (select a__t.*, rownum i__d
          from (SELECT cast(('HVPS') as varchar(4)) AS SYSCODE,
                       A.ID,
                       B.VDATE,
                       cast(('hvps.141.001.01') as varchar(35)) AS Msg_Type,
                       A.BIZ_TYPE_CODE,
                       A.BIZ_CTGY_CODE,
                       A.DRCT,
                       A.AMOUNT,
                       B.STATUS,
                       A.STATUS
                  FROM CP2_HVPS141 A
                 INNER JOIN V_TXN B
                    ON A.ID = B.CORE_ID
                 WHERE 0 = 0
                   AND B.BRNO = '121'
                 ORDER BY A.ID) a__t) b__t
 where i__d < 11
   and i__d >= 1
小弟在子查询中将A,B两个表关联查询的结果放在a__t中,但是存在A.STATUS和B.STATUS这样的重名字段,在ORACLE中会认为存在不明确的列
现在我有很多个这样的类似的sql,我想找出其中存在这种列名重复的sql,不知道各位大侠有没有什么好的建议,多谢指教!

解决方案 »

  1.   


    SELECT TABLE_NAME, COLUMN_NAME
      FROM (SELECT T.TABLE_NAME,
                   T.COLUMN_NAME,
                   COUNT(1) OVER(PARTITION BY T.COLUMN_NAME) RN
              FROM USER_TAB_COLUMNS T)
     WHERE RN > 1
    ;
      

  2.   

    谢谢给出的建议,我执行了以下您给出的这个方案,是把这个用户下的表中和其他表有重复的字段找出来吧,
    像table1    status
      table2    status
      ……
    但是我目的不是这个,是对一个叫cp2_inquire的表中的sql进行查找, 该表中有很多类似我之前提到SQL,而这些重复名字段是放在多表查询时将结果集作为临时表发生的。
    我想通过类似这样的SQL来找到列名数多于1的,
    SELECT COLUMN_NAME
              FROM ALL_TAB_COLUMNS
             WHERE TABLE_NAME = 'CP2_table1'
             group by COLUMN_NAME having count(*) > 1
    但是因为是临时表,TABLE_NAME这里我不知道怎么能处理,求指教。