Oracle中可选参数的处理

今天遇到这么个小问题,说来也常见。就记录一下。


查询 一个输入范围 内的 数据: Select * from table1 Where fld1>=A and fld<=B


其中A,B均为可选输入项目,有如下几种组合:


1:A有值,B无值,即 Select * from table1 Where fld1>=A

2:A有值,B有值,即 Select * from table1 Where fld1>=A and fld<=B

3:A无值,B无值,即 Select * from table1 

4:A无值,B有值,即 Select * from table1 Where  fld<=B


基本语法如下(Oracle),其中fld1字段为数值型函数


Select * from table1

Where 

decode('&1','',1,fld1)>=to_number(decode('&1','',1,'&1'))

and

decode('&2','',1,fld1)<=to_number(decode('&2','',1,'&2'))


基本思路是:

如果输入的值为空,则主动给一个1,将比对字段也设为1。
这样当值为空时,这个条件转化为1>=1,恒定为true,从而使该条件失效(说有效也可以)。


同理,如果只是对于一个可选参数,就是

Select * from table1

Where 

decode('&1','',1,fld1)>=to_number(decode('&1','',1,'&1'))

posted @ 2011-03-28 21:20 阿泰 阅读(...) 评论(...) 编辑 收藏