`
ronon
  • 浏览: 187380 次
  • 性别: 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。其他参数依次类推。

分享到:
评论

相关推荐

    Oracle10g自定义聚合函数(字符串拼接)

    * 自定义聚合函数 wmsys.... * 由于聚合函数只支持一个参数,这里使用对象类型实现传入多个参数 * Oracle11g Release2版本引入了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序

    oracle 11g安装配置

    为用户oracle设置环境变量,并允许使用X终端 [root@dbserver ~]# groupadd oinstall //安装组 [root@dbserver ~]# groupadd dba //管理组 [root@dbserver ~]# useradd -g oinstall -G dba oracle [root@dbserver ~]...

    最全的oracle常用命令大全.txt

    当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库...

    toad for oracle 11

    TOAD® 是 Quest ... DBA 模块还提供了 Oracle 输入/输出和数据库创建向导,以及方便易用的SQL*Loader 界面,提高了数据装载和卸载的效率。Schema Browser 界面全面支持所有 DBA 管理对象的创建、修改和丢弃功能。

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    Object Browser7.0中文版(ORACLE数据库的开发工具)

    Browser的可以精确指出编译错误和运行画面的输入参数,执行时错误显示,以及支持DBMS-OUTPUT等机能让开发程序变得更简便.如果您使用的是Oracle8时,还可以利用更方便的DEBUG环境.   ■强大的SQL执行...

    ORACLE 常用手册导入导出

    --导出ORACLE参数 参数 说明 USERID 确定执行导出实用程序的用户名和口令 BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示 FILE 指定导出的二进制文件名称,默认的扩展名是.dmp FULL 指定是否以全部...

    oracle数据库经典题目

    PGA区是在用户进程连接数据库,创建一个会话时,由Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的PGA区,所有服务器进程PGA区总和即为...

    OCM考试全面解析及经验分享

    OCM考试全称为Oracle Certified Master(Oracle认证大师),是在OCA(Oracle认证专员Oracle Certified Associate)、OCP(Oracle认证专家Oracle Certified Professional)之后更高一级的Oracle技术认证,也是Oracle技术...

    OraclePLSQL编程经典例子

    过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,...

    Oracle parameter可能值获取方法

    有时不清楚一些参数的所有允许设定的值,可以由以下两个方法获得 1.直接输入错的值,让error来提示 代码如下: SQL> alter system set “_db_block_cache_protect”=what scope=spfile; alter system set “_db_block...

    Oraclet中的触发器

    当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则为行触发器。 REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,...

    orcale常用命令

    当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库...

    风越.net代码生成器 v3.5

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    风越asp代码生成器 V3.5

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    Mindsware动态数据对象平台v0.2版发布

    还能根据列是否 允许为空、是否为数字、是否为密码,来动态加入validator,在页面上进行提交 前的validation,比如密码要求输两遍,而且两编输入的要一致,列为数字的文 本框里只能为数字等等。查询表格中,如果列为...

    Toad 使用快速入门

    运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。在调式过程中,Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad,非常容易检测到存储过程的错误,开发人员可以一步...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接批量...

    数据库安全性设计.doc

    2.5 充分利用系统全局区域SGA(System Global Area) 我们用Oracle设计数据库,当我们启动Oracle的数据库时,系统为了储存用户所需要 数据及Oracle正常运行所必备系统信息,首先会在内存内规划出来一个固定的区域...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

Global site tag (gtag.js) - Google Analytics