我试图获取使用系统或目录表引用特定字段的所有表/视图(换句话说所有对象)的列表。我使用以下查询。
select *
from dba_col_comments
where column_name like('SXX_AXXX_%')
order by 1;
但是,输出是不稳定的。当我重复运行相同的查询而没有任何更改时,输出会有所不同。例如,它产生9300条记录,然后在几分钟后产生9350,然后在几分钟后产生9347条。
我也在Teradata中观察到相同的行为。
我的理论是 - 在生产环境中,创建的临时对象可能在系统/目录表中获得一个条目。
有任何想法/指示吗?
答案 0 :(得分:0)
在Teradata中,您会发现当global temporary tables
被实例化(由SQL语句引用)时,应将记录添加到数据字典表TVM中。然后在会话注销后删除这些记录,只留下与提交的原始CREATE GLOBAL TEMPORARY TABLE
语句关联的基表记录。
您可以使用视图DBC.AllTempTables
找到这些实例。
在Teradata中,volatile tables
未在数据字典中维护。
编辑 - 您的里程可能会有所不同,但这可以让您开始使用Teradata
SELECT D1.DatabaseNameI AS DatabaseName_
, T1.TVMNameI AS TableName_
, F1.FieldName AS ColumnName_
FROM "DBC".TVM T1
INNER JOIN
"DBC".Dbase D1
ON D1.DatabaseId = T1.DatabaseId
INNER JOIN
"DBC".TVFields F1
ON F1.DatabaseId = T1.DatabaseId
AND F1.TableId = T1.TVMId
WHERE F1.FieldName = 'MyColumn'
--AND D1.DatabaseNameI IN ('{Database1}', ... '{Database99}') -- Filter on databases
AND F1.FieldType in ('i', 'i1', 'i2', 'i8') -- Integer, ByteInt, SmallInt, BigInt
--AND T1.TableKind IN ('T') -- Optional Filter to just tables.
AND NOT EXISTS
(SELECT 'x'
FROM "DBC".TempTables TT1
WHERE Tt1.TableId = T1.TVMId
)
;