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 当输入参数允许为空时的更多相关文章
- jq实现两个input输入同时不为空时,改变确认框背景颜色
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- SQlserver 当输入参数为可选条件
以前很懒,都是用拼接字符串的方式,加上if 语句,根据输入参数是否为空来判断是否需要在where 后加上对应字段的条件限制 但是拼接字符串很烦,又总是被转义符搞得很烦 '''' 所以想了其他办法 分 ...
- 003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理
本博客的内容全部来自于传智播客,特在此说明. 业务要求如下:在jsp页面(jFactoryCreate.jsp)上输入数据时,转到后台,并输入到数据库. jFactoryCreate.jsp页面:
- easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字
先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...
- Matlab中 awgn 函数输入参数带有‘measured’ 时snr的含义
MATLAB中awgn 函数可以为输入信号x 添加一定大小的噪声. out = awgn(in,snr,'measured'); 是一种常见的使用方法,意思是在添加噪声前先测量一下输入信号的功率,再 ...
- Java开发笔记(二十五)方法的输入参数
前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定 ...
- spring boot 输入参数统一校验
1 引入spring boot validate maven 依赖 <!-- 验证 --> <dependency> <groupId>org.hiberna ...
- 静默安装oracle 11g及参数配置优化详解
一.安装前准备工作1.修改主机名#vi /etc/hosts //并添加内网IP地址对应的hostname,如下127.0.0.1 localhost::1 ...
- oracle 日期问题 网上找到自己查阅时方便
第一部分:oracle sql日期比较: oracle sql日期比较:在今天之前: select*from up_date whereupdate< to_date('2007-09-07 0 ...
随机推荐
- python 列出出当前目录及所有子目录下的文件
[root@web1 test]# cat walk.py #!/usr/bin/python # -*- coding: UTF-8 -*- import os for root, dirs, fi ...
- hdu 5652
India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- CentOS 7.3降低内核版本为7.2
查看当前内核版本: [root@nineep ~]# uname -r 2.3.10.0-514.2.2.el7.x86_64 查看当前发行版本: [root@nineep ~]# cat /etc ...
- nyoj_915_+-字符串_201402261520
+-字符串 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和 ...
- Spring MVC-集成(Integration)-生成PDF示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_pdf.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何 ...
- ZooKeeper可以用来做什么(转)
在ZooKeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...
- spring-cloud-feign使用@RequetParam错误:QueryMap parameter must be a Map: int
错误: QueryMap parameter must be a Map: int spring-cloud-feign处理@RequestParam和Spring MVC的不一样,Spring MV ...
- HDU 5434
其实是一道状态DP题.都是行与行之间的转移,可以知道,当某j列中有一个象,如果存在情况i-1行j-1列有象而i,j-1位置无象则不可放,或者i-1,j+1有而i,j+1无同样不可放. 使用快速状态转移 ...
- Eclipse搭建maven开发环境
上一篇学习了maven开发环境的搭建,而且手动编写了一个mavenproject,可是这样子效率非常低下.今天带大家学习在eclipse下搭建maven开发环境. 经常使用的maven命令 mvn c ...
- 学习笔记——SQL SERVER的递归
SQL SERVER似乎天然具有支持递归的属性. 1.比如说,有几次,我编写或修改存储过程的时候,为图方便,在末尾随手写上 执行这个存储过程 的语句,比如 [sql] view plaincopy A ...