`
ronon
  • 浏览: 192235 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

Oracle 当输入参数允许为空时

 
阅读更多

场景:

有一个存储过程p_test 带有多个输入参数code、name、number

p_test(code IN VARCHAR2,nameIN VARCHAR2,number IN VARCHAR2,resultList OUT sys_refcursor)

但是业务上要求这三个参数都允许为空,也就是都不是必填项

 

原本sql语句是写成这样的:

select * from temptbl a where a.code=code and a.name=name and a.number=number

 

设想:

一开始想到的是分别对每个参数进行空值判断,然后拼接sql,不为空的参数就写到where条件里去。但是对于简单的sql好说,对于复杂的sql不太可行,这样做代码会很乱。

 

结论:

 

百度后找到一个很有用的函数叫COALESCE(表达式1,表达式2,.....,表达式n)

它的作用是返回多个表达式中第一个非null的值,从左到右找寻,找到后即停止寻找并返回该非null值。

例子:coalesce(null,2,3)  返回值为:2  

当然参数中的2和3也可写成表示式,如3+3、4+5之类的。或者其他数据类型。

回到刚刚的问题,此问题可以结合coalesce函数和like完成(或许还有更好的办法不过我现在只想到这个)

sql语句可以改为:

select * from temptbl a where a.code like coalesce(code,'%%') and a.name like coalesce(name,'%%') and a.number like coalesce(number,'%%')

那么当输入参数code为null时条件就变成a.code like '%%',即不限制a.code的值(不过a.code为null的值会过滤掉,如果实际业务要展示null值,需另行判断);当输入参数code不为null时条件就变成a.code like code,由于未加通配符,此查询等同于a.code=code。其他参数依次类推。

分享到:
评论

相关推荐

    oracle实现带参数视图

    然而,标准的视图定义是静态的,无法根据不同的输入参数返回不同的结果集。Oracle 数据库提供了一种称为“带参数视图”的特性,允许我们在创建视图时传递参数,从而使得视图能够根据这些参数的变化展示不同的数据。 ...

    Oracle SET命令参数详解

    ON表示允许一行中输入多个命令,并自动将命令分隔符设为分号(;)。C表示设置自定义字符。 5. **COMPATIBILITY** - 默认值:NATIVE - 可选值:V5、V6、V7 - 描述:指定当前连接的Oracle版本。如果希望由数据库...

    LoadRunner 参数化导入Oracle数据

    这些数据现在可以作为参数在你的LoadRunner脚本中使用,每次运行测试时,都会从列表中选择不同的值,模拟多个用户的并发操作。 通过以上步骤,你就成功地在LoadRunner中使用Data Wizard完成了从Oracle数据库导入...

    JDBC和Oracle的参数设置和调用技术.pdf

    Oracle的存储过程是预编译的代码块,能提升系统性能,减少网络传输,并允许代码的复用。它们使用PL/SQL语言编写,结合了SQL与过程化编程的特点。 在调用Oracle存储过程时,主要涉及以下几个步骤: 1. **加载JDBC...

    基于C#连接Oracle数据库Oracle.ManagedDataAccess

    首先,Oracle.ManagedDataAccess是Oracle公司提供的一个纯.NET框架的客户端驱动,它允许开发者在不安装Oracle客户端的情况下,直接与Oracle数据库进行交互。这个库包含了所有必要的组件,使得C#程序可以方便地执行...

    LoadRunner数据库连接及参数设置(oracle)

    【LoadRunner数据库连接及参数设置(Oracle)】 在性能测试中,LoadRunner是一个强大的工具,它允许测试人员模拟大量用户负载来验证系统的性能和稳定性。本文将详细介绍如何使用LoadRunner连接Oracle数据库并进行...

    VB调用ORACLE存储过程

    - **Value**:参数的初始值,对于输入参数,这是调用存储过程时传递的值;对于输出参数和返回值,Execute后会更新此值。 在处理Oracle存储过程时,还要注意Oracle的特定特性,例如Oracle支持PL/SQL块,可能包含复杂...

    Oracle 验证是否是日期

    1. **输入参数**:`v_tjrq VARCHAR2`,这是一个待验证的字符串,通常代表日期。 2. **返回值类型**:`NUMBER`,返回1表示输入字符串可以被解析成有效日期,返回0表示无效。 3. **逻辑流程**: - **空值检查**:...

    oracle存储过程常用技巧

    2. OUT 参数:作为输出参数,需要注意,当一个参数被指定为 OUT 类型时,就算在调用存储过程之前对该参数进行了赋值,在存储过程中可以重新赋值。 3. IN OUT 参数:既可以作为输入参数,也可以作为输出参数。 三、...

    oracle存储过程实例

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL和PL/SQL语句,形成一个可重用的程序单元。存储过程在数据库中预先编译并存储,这样在执行时能提高效率,因为它避免了每次调用时的重新...

    C#使用Oracle.ManagedDataAccess.dll轻松访问oracle数据库

    Oracle.ManagedDataAccess.dll是Oracle公司为.NET Framework提供的一款托管数据访问组件,它允许开发者无需安装Oracle客户端即可直接在C#应用中访问Oracle数据库。这个组件完全由.NET Framework管理,因此消除了对...

    navicat连接oracle插件

    Oracle Instant Client是Oracle公司提供的一个轻量级客户端,它允许应用程序无需完整安装Oracle Database服务器即可连接到Oracle数据库。在描述中提到的"navicat连接oracle的第三方工具",这里的“第三方工具”实际...

    Oracle Provider for OLE DB Developer's Guide.pdf

    - **配置连接参数**:输入Oracle数据库服务器地址、端口号、SID或服务名称以及登录凭据等信息。 #### 四、编程接口 **1. 连接数据库** - 使用`IDataSourceAdmin`接口创建数据源对象。 - 调用`IDataSource::Open`...

    java调用oracle含有clob参数的存储过程.docx

    使用`CallableStatement`的`setObject()`方法设置存储过程的输入参数。在这个例子中,`proc.setObject(1, _oClob);`将创建的CLOB对象设置为第一个参数。 5. **声明输出参数**: 存储过程可能有返回值或输出参数。...

    强制释放Oracle数据连接方案

    此外,在执行该命令时可能会遇到ORA-12519错误,这是因为Oracle实例处于某种特殊模式(如归档模式)下,不允许动态调整某些参数。 #### 扩展数据库配置助手(DBCA) 为了更好地管理和配置数据库,Oracle提供了...

    Oracle Developer开发指南

    4. **报表参数化**:Oracle Reports支持参数化报表,允许用户输入值来定制报告内容。 五、学习和进阶 对于初学者,可以通过官方文档、在线教程和实践项目来学习Oracle Developer的基础知识。进阶学习可以关注性能...

    Oracle返回记录集.docx

    Oracle数据库允许存储过程返回记录集,这在处理复杂业务逻辑时非常有用,特别是当你需要从数据库获取一组数据并在应用程序中进一步处理时。本篇将详细解释如何使用.NET框架调用Oracle存储过程来获取记录集。 首先,...

    Oracle report

    这包括输入参数、选择列表参数和预定义参数等多种形式。 7. **交互式报告**:通过添加按钮、菜单等交互元素,可以创建交互式报告,让用户在报告中执行诸如刷新、打印、导出等操作。 8. **导出和发布**:Oracle ...

    Oracle的out参数实例详解

    Oracle的OUT参数是数据库编程中的一个重要概念,尤其在创建存储过程和存储函数时,它们能够帮助我们传递数据从存储过程到调用程序。在Oracle数据库系统中,存储过程和存储函数是预编译的SQL语句集合,可以包含输入、...

Global site tag (gtag.js) - Google Analytics