【发布时间】:2021-05-17 19:34:58
【问题描述】:
您好,我需要从 DWH 模式的固定列中查找和识别特定值,理想情况下是为了识别与每个数字关联的系统名称,以便我可以跟踪与该系统关联的表的总数示例将给出清晰的理解
假设我有大约 100 个系统,从 1 到 100 个数字,所以每个系统都由一个数字定义
例子
SYSTEM NO
LOGISTIC 1
FINANCE 2
SALES 3
CREDIT 4
SECUTIRY 5
一直到 100 岁
在数据库中,我有数千个表,因此每个表都有一个名为 ETL_SOURCE_SYSTEM 的固定列,该列将定义此编号,以便有一个元数据静态表/查找表,它将保存系统名称及其关联的系统编号, 所以不是系统和系统号是唯一的
所以现在我需要提出一个动态 sql 来扫描 DWH 中的所有模式,以确定哪个系统名称和编号具有所有表中所有模式的总计数
查询
select * from dba_tab_cols
where column_name like '%ETL_SOURCE_SYSTEM%'
查询 - 新思路
select 'with tmp(schema_name,table_name, system_nbr) as (' from dual
union all
select 'select '''||owner||'''''as SCHEMA_NAME'','''||object_name||'''''as TABLE_NAME'',ETL_SOURCE_SYSTEM from '||object_name||' union all ' from dba_objects
where owner not in ('EXCLUDE the some of the nor relevant schemas like SYS,PUBLIC..')
--and owner=''
and object_type ='TABLE'
union all
select 'select '''','''',0 from dual) select owner,table_name,system_nbr from tmp order by owner,system_nbr desc ;' from dual;
如果这真的可以在动态 sql 中以从所有表中获取值系统 1 到 100 以获得以下所需结果
预期结果
SCHEMA_NAME TOTAL_COUNTS_OF_TABLES SYSTEM_NAME SYSTEM_NUMBER
STAGE 150 LOGISTIC 1
EDW 300 LOGISTIC 1
MART 600 LOGISTIC 1
STAGE 150 FINANCE 2
EDW 300 FINANCE 2
MART 600 FINANCE 2
STAGE 150 SALES 3
EDW 300 SALES 3
MART 600 SALES 3
STAGE 150 CREDIT 4
EDW 300 CREDIT 4
MART 600 CREDIT 4
注意:DB 是 Oracle 11g,我只介绍了几个模式,例如模式列表大 50+ 或更多
有什么建议吗?
【问题讨论】:
标签: sql oracle plsql dynamic-sql