首页 新闻 搜索 专区 学院

求助oracle存储过程传入varchar型参数用于查询中in的问题

0
悬赏园豆:15 [已关闭问题] 关闭于 2014-06-30 15:14

输入参数b varchar2 '1,2,3,4,5,6,7 ' 
但是过程 中查询的时候是select * from table where id in(b) 
这样查询出来的效果是select * from table where id in('1,2,3,4,5,6,7') 

但我想要的结果是select * from table where id in(1,2,3,4,5,6,7) 

怎么操作

cmuler的主页 cmuler | 初学一级 | 园豆:49
提问于:2014-06-27 10:31
< >
分享
所有回答(3)
0

没办法,这东西没办法用参数话查询.只能拼接字符串,

吴瑞祥 | 园豆:28841 (高人七级) | 2014-06-27 10:57
0

用动态SQL吧,建一个变量@Sql,然后用拼接字符串的方法得到SQL,把值赋给@Sql,然后执行这个@Sql得到结果集。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-06-27 15:08
0

哎,换工作以后,用的是sqlserver数据库,所以对于其中的一些函数不是很清楚了,我最近刚好碰到了跟你一样的问题,我的某个字段的数据格式是这样的     '武汉','天津','长沙','','广州',我的其他表刚好有个字段存放的只是一个城市名,所以也要用in语句,我是讲这个字符串拆分成一个临时表,然后查询这个临时表中的数据,然后再用in,就可以解决了,代码如下

ALTER Function [dbo].[StrToTable](@str varchar(1000))
Returns @tableName Table
(
   str2table varchar(50)
)
As
--该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串'ab','dc' 将编程一个表,这个表
Begin
set @str = @str+','--字符串成了'ab','dc',
Declare @insertStr varchar(50) --截取后的第一个字符串
Declare @newstr varchar(1000) --截取第一个字符串后剩余的字符串
set @newstr = stuff(@str,1,charindex('''',@str),'')--截取掉了字符串中的第一个单引号 成了ab','dc',
set @insertStr = left(@newstr,charindex('''',@newstr)-1)--截取到下一个单引号之间的字符 例如 ab','dc', -->成了','dc'
set @newstr = stuff(@newstr,1,charindex(',',@newstr),'')--将剩余字符串到第一个逗号之间的字符又用''(空字符串代替) -->成了'dc',
Insert @tableName Values(@insertStr)
while(len(@newstr)>0)
begin
   set @newstr = stuff(@newstr,1,charindex('''',@newstr),'')
   set @insertStr = left(@newstr,charindex('''',@newstr)-1)
   Insert @tableName Values(@insertStr)
   set @newstr = stuff(@newstr,1,charindex(',',@newstr),'')
end
Return
End
LgV5 | 园豆:221 (菜鸟二级) | 2014-06-27 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册