`
53873039oycg
  • 浏览: 837156 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle检查配置的参数个数是否一致

 
阅读更多

       工作时候遇到一个问题,表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

    结果为:

     

 

     本人水平有限,欢迎各位提出更好的写法或者思路,谢谢。
     全文完

 

 

  • 大小: 11 KB
0
0
分享到:
评论

相关推荐

    oracle cluster 检查脚本

    例如,它会检查操作系统的版本、内核参数设置、网络配置等是否符合Oracle的要求。这一步骤非常重要,因为如果系统环境不符合要求,可能会导致Oracle Clusterware安装失败或者后续运行出现问题。 #### 四、检查脚本...

    ORACLE初始化参数详解

    Oracle数据库系统在运行时依赖于一系列的初始化参数来配置其行为和性能。这些参数定义了数据库的内存结构、磁盘空间使用、系统资源限制、数据文件管理等多个方面,是优化Oracle数据库性能的关键因素。以下是对Oracle...

    OracleGoldenGate配置手册

    Oracle GoldenGate 是一款高效的数据复制解决方案,用于实时或近实时...在配置过程中,务必注意每个步骤的正确性,以确保数据的准确性和一致性。遇到问题时,参照提供的手册和文档,以及社区支持,通常能找到解决办法。

    Oracle Goldengate参数规范

    例如,AUTOSTARTER参数就是一个非强制配置的选项,它在特定情况下可以用来启动管理进程时自动启动所有EXTRACT进程。 3. 特定参数:这类参数通常是为了满足特定环境或平台的需求而设置的。它们并不适用于所有的情况...

    Oracle网络管理和参数设置

    #### 二、Oracle网络配置参数 Oracle网络配置涉及到多个参数的设置,这些参数主要用于控制网络通信的各个方面。主要包括: 1. **监听器参数**: - `LISTENER_`开头的参数用于定义监听器的行为,例如`LISTENER_...

    Oracle一个实例配置多个监听

    ### Oracle 一个实例配置多个监听 #### 背景与目的 在Oracle 11g环境中,有时出于网络隔离、安全或性能优化等需求,可能需要为同一个数据库实例配置多个监听器。这样做可以让不同的应用程序通过不同的端口访问同一...

    ArcSDE连接Oracle配置

    #### 六、Oracle数据库初始化参数的配置 1. **初始化参数文件 (init[sid].ora)**: - 用于配置Oracle实例的启动参数。 - 在ArcSDE环境下,根据实际需求调整这些参数,以确保数据库的最佳性能。 综上所述,在进行...

    Oracle数据库监听配置

    - **检查服务名配置**:确保客户端和服务端的配置文件中的服务名一致。 - **更新服务名**:如果更改了服务名,需要同时更新客户端和服务端的配置文件。 3. **端口不可达**: - **检查端口占用情况**:使用`...

    Oracle数据库的数据文件规划、维护、恢复和初始参数的配置说明

    Oracle数据库的数据文件规划、维护、恢复和初始参数配置是数据库管理员日常工作中至关重要的部分。理解这些概念和操作对于确保数据库的高效运行和数据安全性至关重要。 1. Oracle架构 Oracle数据库由多个物理和逻辑...

    Oracle SOA 套件和 RAC 数据库事务一致性配置指南

    在部署 Oracle SOA 套件之前,应检查是否需要任何特定于 RAC 环境的补丁。 总之,Oracle SOA 套件与 Oracle RAC 数据库的集成涉及多方面的配置和优化。通过遵循本文档提供的指导原则,可以构建一个既强大又可靠的...

    Oracle init.ora 配置详解

    在Oracle数据库管理中,`init.ora`文件扮演着极其重要的角色,它主要用于存储数据库实例级别的参数配置。这些参数对于数据库的启动、运行及性能优化至关重要。下面我们将对init.ora文件中的关键参数进行详细解析。 ...

    Oracle数据库RAC健康检查脚本

    这个"Oracle RAC集群及单机环境下数据库健康检查详细巡检脚本"包含了对数据库全面巡检所需的各种检查,适用于日常维护工作。以下是该脚本可能涵盖的一些主要检查点: 1. **实例状态检查**:脚本会验证每个实例是否...

    Oracle安装配置教程

    Oracle 安装配置教程 本文档旨在指导用户完成 Oracle 数据库的安装、新建数据库、创建用户并赋予权限的整个过程。下面是详细的知识点: 一、安装 Oracle 数据库 安装 Oracle 数据库需要准备以下原料: * Oracle ...

Global site tag (gtag.js) - Google Analytics