工作时候遇到一个问题,表A中保存了sql查询的脚本,其中有参数值使用:参数名称代替,如a=:A,表B配置了参数名称,如A,我想知道表A和表B的参数个数是否一致(不考虑名称是否相同,只考虑个数是否相同),随手写了个sql,sql如下:
with tmp_sql as( select 1 as rid,'from p where 1=1 and p.a1=:A1 and a.done_date >=to_date(:create_date, ''yyyy-mm-dd'') and a.done_date <to_date(:done_date, ''yyyy-mm-dd'')+1 and p.a2=:A2' as sql_str from dual union all select 2 as rid,'from p where a1=:A1 and a2=:A2' as sql_str from dual union all select 3 as rid,'from p where a1=a1' as sql_str from dual union all select 4 as rid,'from p where a1=:a2' as sql_str from dual), tmp_p as( select 1 as id,1 as rid,'A1' as pname from dual union all select 2 as id,1 as rid,'create_date' as pname from dual union all select 3 as id,1 as rid,'done_date' as pname from dual union all select 4 as id,1 as rid,'A2' as pname from dual union all select 5 as id,2 as rid,'A1' as pname from dual union all select 6 as id,3 as rid,'A2' as pname from dual union all select 7 as id,4 as rid,'A2' as pname from dual ) select cc.rid, cc.param_total, dd.right_param from (select bb.rid, --取不重复的参数个数 count(distinct lower(bb.result_str)) param_total from (select aa.rid, aa.sql_str, level, --取:后面的参数名称 regexp_substr(sql_str, ':[a-zA-Z0-9_\s]*', 1, level) result_str from (select rid, --把多个sql_str合并为一个,并去除多余的空格或换行 listagg(regexp_replace(replace(sql_str, chr(10), ' '), '\s{2,}', ' '), '') within group(order by rid) sql_str from tmp_sql t group by t.rid) aa --取全部的:参数 connect by level <= regexp_count(sql_str, ':')--:参数的个数 and prior rid = rid and prior dbms_random.value is not null) bb group by bb.rid) cc, (select rid, count(distinct lower(pname)) right_param from tmp_p group by rid) dd where 1 = 1 and cc.param_total != dd.right_param and cc.rid = dd.rid
结果为:
本人水平有限,欢迎各位提出更好的写法或者思路,谢谢。
全文完。
相关推荐
例如,它会检查操作系统的版本、内核参数设置、网络配置等是否符合Oracle的要求。这一步骤非常重要,因为如果系统环境不符合要求,可能会导致Oracle Clusterware安装失败或者后续运行出现问题。 #### 四、检查脚本...
Oracle数据库系统在运行时依赖于一系列的初始化参数来配置其行为和性能。这些参数定义了数据库的内存结构、磁盘空间使用、系统资源限制、数据文件管理等多个方面,是优化Oracle数据库性能的关键因素。以下是对Oracle...
Oracle GoldenGate 是一款高效的数据复制解决方案,用于实时或近实时...在配置过程中,务必注意每个步骤的正确性,以确保数据的准确性和一致性。遇到问题时,参照提供的手册和文档,以及社区支持,通常能找到解决办法。
例如,AUTOSTARTER参数就是一个非强制配置的选项,它在特定情况下可以用来启动管理进程时自动启动所有EXTRACT进程。 3. 特定参数:这类参数通常是为了满足特定环境或平台的需求而设置的。它们并不适用于所有的情况...
#### 二、Oracle网络配置参数 Oracle网络配置涉及到多个参数的设置,这些参数主要用于控制网络通信的各个方面。主要包括: 1. **监听器参数**: - `LISTENER_`开头的参数用于定义监听器的行为,例如`LISTENER_...
### Oracle 一个实例配置多个监听 #### 背景与目的 在Oracle 11g环境中,有时出于网络隔离、安全或性能优化等需求,可能需要为同一个数据库实例配置多个监听器。这样做可以让不同的应用程序通过不同的端口访问同一...
#### 六、Oracle数据库初始化参数的配置 1. **初始化参数文件 (init[sid].ora)**: - 用于配置Oracle实例的启动参数。 - 在ArcSDE环境下,根据实际需求调整这些参数,以确保数据库的最佳性能。 综上所述,在进行...
- **检查服务名配置**:确保客户端和服务端的配置文件中的服务名一致。 - **更新服务名**:如果更改了服务名,需要同时更新客户端和服务端的配置文件。 3. **端口不可达**: - **检查端口占用情况**:使用`...
Oracle数据库的数据文件规划、维护、恢复和初始参数配置是数据库管理员日常工作中至关重要的部分。理解这些概念和操作对于确保数据库的高效运行和数据安全性至关重要。 1. Oracle架构 Oracle数据库由多个物理和逻辑...
在部署 Oracle SOA 套件之前,应检查是否需要任何特定于 RAC 环境的补丁。 总之,Oracle SOA 套件与 Oracle RAC 数据库的集成涉及多方面的配置和优化。通过遵循本文档提供的指导原则,可以构建一个既强大又可靠的...
这个"Oracle RAC集群及单机环境下数据库健康检查详细巡检脚本"包含了对数据库全面巡检所需的各种检查,适用于日常维护工作。以下是该脚本可能涵盖的一些主要检查点: 1. **实例状态检查**:脚本会验证每个实例是否...
Oracle在Linux下的安装配置涉及到多个核心概念和技术,其中包括Oracle的Real Application Clusters (RAC)、Cluster Ready Service (CRS)、Cluster Verification Utility (CVU)、Oracle Universal Installer (OUI)、...
在Oracle数据库管理中,`init.ora`文件扮演着极其重要的角色,它主要用于存储数据库实例级别的参数配置。这些参数对于数据库的启动、运行及性能优化至关重要。下面我们将对init.ora文件中的关键参数进行详细解析。 ...
- **Peer Node Check**:检查所有节点之间的配置一致性。 - **Pre-Installation Check**:安装前检查硬件和软件环境是否满足要求。 - **Post-Installation Check**:安装后验证集群环境是否配置正确。 - **Node ...
### Oracle数据容灾之Oracle GoldenGate配置与测试总结 #### 1....在实际应用中,可以根据具体需求调整配置参数,以达到最佳的数据同步效果。同时,也需要注意定期进行维护和测试,确保系统的稳定运行。
3. **服务检查**:使用`#ps –ef |grep ha`和`#ps –ef |grep mirror`命令确认服务是否成功启动。 ### 配置Oracle服务 1. **创建应用服务**:在RoseMirrorHA界面中,创建Oracle应用服务,指定服务名称、类型和服务...
### Oracle GoldenGate 安装配置知识点 #### 一、Oracle GoldenGate 双向复制方案简介 **Oracle GoldenGate (OGG)** 是一款强大的数据复制工具,适用于多种平台和数据库版本,能够实现实时的数据捕获、转换和交付...