是否有列表或方法可以查找名称不同但包含相同数据的所有字段?

问题描述

例如,EMPLID 也被存储为 COMMON_ID。我知道 Term (STRM) 也作为其他东西存储在不同的表中。

我只是很好奇是否有 table.field 的所有列表?或者,如果在 sql 或 App Designer 中有一种方法可以提取它?

谢谢

解决方法

我不知道有什么交付方式可以做到这一点。

我能想到的最接近的方法是查询像 PSDBFIELD 这样的表,以查找元数据与 EMPLID 匹配的字段。

例如长度为 11 的字段,类型为字符串,格式为大写

,

不久前我编写了脚本来执行此操作,这些脚本可在 GitHub 上找到。有一个用于 Oracle DB 的 PL/SQL 版本和一个 SQR 版本。它基本上查找可能包含正在搜索的数据值的所有字段,并查询每个表以查看该值是否存在。这可能需要一段时间,但我们已经成功使用了几次。

https://github.com/otherted/findfieldvalue

主要的驱动当然是选择表和字段名称...

SELECT 
     RF.RECNAME,RF.FIELDNAME,RD.SQLTABLENAME,F.FIELDTYPE
   FROM SYSADM.PSRECFIELDDB RF,SYSADM.PSRECDEFN RD,SYSADM.PSDBFIELD F
   WHERE RF.FIELDNAME LIKE UPPER(:fieldnamein)
   AND RD.RECNAME = RF.RECNAME
   AND RD.RECTYPE = 0  -- ONLY CHECK SQL TABLES
   AND RF.FIELDNAME = F.FIELDNAME
   AND F.FIELDTYPE LIKE :fieldtypein
   AND F.FIELDTYPE <> 8  -- exclue IMAGE fields which are binary BLOB
   AND (((F.LENGTH + F.DECIMALPOS + 2) >= length(:fieldvaluein)) 
        OR (F.LENGTH = 0))
   ORDER BY RF.RECNAME,RF.FIELDNAME;   

然后为每个表/字段尝试找到值...

 'SELECT UPPER(' || o_realfldname || '),COUNT(*) ' ||
      'FROM SYSADM.' || o_realrecname || ' A ' ||
      'WHERE UPPER(' || o_realfldname || ') LIKE :1 '  ||
      'GROUP BY UPPER(' || o_realfldname || ') ';