sql - 数据库对象名称捕获以 oracle db 结尾的最后一个字符
问题描述
我正在尝试捕获第一个字符搜索与最后一个字符,并比较来自 dba_objects 的所有对象名称(表、视图、表分区、同义词...)的总体计数匹配搜索,我有一个类似的问题来捕获所有对象名称,但在这种情况下是第一个字符,所以我使用了这个查询
为了使我的实际问题简单明了,请在下面找到两个查询
Query1 - 捕获数据库对象的计数 BEGINNING with
业主人数- 70678
object_name 计数- 121341
对象类型- 128322
SELECT
owner AS schema_name, --70,678
object_name, --1,21,341
object_type,--1,28,322
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1') as BEGINNING,
count(*),
round(100*ratio_to_report(count(*)) over (), 4) percentage
FROM
dba_objects
GROUP BY
owner,
object_name,
object_type,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1')
ORDER BY
percentage desc;
结果符合预期 -满意
OBJECT_NAME BEGINNING COUNT(*) PERCENT
ABC_CUST_INFO_D ABC 20 .00010
BBC_CUST_ENTRY_F BBC 100 .030
FHS_PRDCT_STST_T A$f 194 .031
GHS_INVTR_CD_DRY A1B 493 .051
Query2 - 捕获以 ENDING 结尾的数据库对象的计数
拥有者数量- 71881
object_name 计数- 121341
对象类型- 128322
select
owner,--71,881
object_name,--1,21,341
object_type,--1,28,322
regexp_substr(object_name, '[^_]*$') ENDING,
count(*) COUNT,
--count(*) / sum(count(*)) over(partition by owner) ratio
round(100*ratio_to_report(count(*)) over (), 4) percentage
from
dba_objects
group by
owner,
object_name,
object_type,
regexp_substr(object_name, '[^_]*$')
ORDER BY
percentage desc;
结果符合预期 -满意
OBJECT_NAME ENDING COUNT(*) PERCENT
ABC_CUST_INFO_D D 20 .00010
BBC_CUST_ENTRY_F F 100 .030
FHS_PRDCT_STST_T T 194 .031
GHS_INVTR_CD_DRY DRY 493 .051
因此,在重新访问这两个查询后,我能够比较计数并注意到存在计数差异(1203 个计数),如果我只检查所有者的计数,有人可以告诉我为什么会有差异吗?
那么请您仔细检查一下,让我知道用于 Query1 和 Query2 的查询逻辑是否正确?
解决方案
您还在预期结果中提到了每个对象名称,您必须使用如下解析函数:
SELECT OBJECT_NAME,
Sbstr as ending,
Count(1) over (partition by sbstr) as "count(*)",
Count(1) over (partition by sbstr) / Count(1) over () as percentage
From
(select
object_name,
REGEXP_SUBSTR(OBJECT_NAME, '_([A-Z]+)$',1,1,null,1) as SBSTR
from
dba_objects
Where
REGEXP_LIKE(OBJECT_NAME, '_[A-Z]$')
)
注意:这将返回以大写字符后跟 _ 结尾的每个对象名称。
推荐阅读
- c# - 在不尝试删除文件的情况下检查 FTP 删除权限
- ios - 滚动时水平移动全景背景
- reactjs - 如何从 xeogl 场景中获取 Gltf 数据?
- html - Odoo 11 - 网站页面中缺少
- xslt - 我需要在 xslt 中随机生成一个唯一的 9 位序列号
- angular - 如何更改图标的颜色
以及日历上所选日期的颜色 - objective-c - 在 OSX 中识别活动应用程序的方法是什么
- javascript - 在空手道场景中使用 json.stringify() 的 JSON 转义字符
- ios - 如何让 React Native 使用 Xcode 遗留构建系统?
- python - 根据文本删除 SVG 元素