场景(oracle):
我们有一个表 a,有一个列
现在要求 传入一个参数 x,x的值为id1,id2,id3 最终实现 select * from a where id in (id1,id2,id3)
这个在程序代码里比较容易实现,直接用 SQL 也可以。如 Select * from a where id in (&a)
但是在报表上直接实现就有些困难。
解决方法:
构造一个语句实现该效果,前提是id值中间不能有空格,将x的传入值处理为 id1 id2 id3 用空格间隔。
Select
*
from
a
where
参数x的值
like
'
%
'
||
id
||
'
%
'
加上数据就是这个样子:
Select
*
from
a
where
'
1 2 3
'
like
'
%1%
'
id1 id2 id3 中间的空格,作为间隔符号了
当然,问题也来了,比如说值是这样的
Select
*
from
a
where
'
11 12 13
'
like
'
%1%
'
,
那么值就错了。
这样我们需要在处理一下:
Select
*
from
a
where
'
11 12 13
'
like
'
% 1 %
'
这个时候用的是 id 前后各加一个空格,去匹配x的值。这样得到的值就是准确的了。
当然,这个空格可以根据需要替换成其他的字符。
一个稍微复杂点的BOE UNV应用(在这里,因为code是定长的,所以直接操作了)
Decode(trim(
@Prompt
(
'
请输入险种代码,用空格分隔
'
,
'
A
'
, , Mono, Free)),
''
,
'
1
'
,trim(
@Prompt
(
'
请输入险种代码,用空格分隔
'
,
'
A
'
, , Mono, Free)))
like
'
%
'
||
Decode(trim(
@Prompt
(
'
请输入险种代码,用空格分隔
'
,
'
A
'
, , Mono, Free)),
''
,
'
1
'
,t.PRODUCT_CODE)
||
'
%
'
当然,这个效率就比较一般了。