问题描述
例如,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 || ') ';