想传入查询参数到存储过程中,但参数代表一个集合。不知该如何实现。
首先是参数用什么类型?然后是在PL/SQL中查询语句的条件该如何写?
期望的SQL查询是类似这样的:
select * from aaa where col1 in (v1, v2, v3, v4)
想传入查询参数到存储过程中,但参数代表一个集合。不知该如何实现。
首先是参数用什么类型?然后是在PL/SQL中查询语句的条件该如何写?
期望的SQL查询是类似这样的:
select * from aaa where col1 in (v1, v2, v3, v4)
比较自然的想法是:传入参数为CSV格式的字符串如'1,2,3,4'或'abc,def,ghi',程序对其进行分解,存放到临时表中,然后查询条件这样写 where col1 in(select col1 from temptable where ...)
进一步:能不能不用临时表呢?查了一些资料,发现可以用table()函数结合嵌套表或VARRAY表来实现。具体如下:
0)定义一个嵌套表类型
create or replace type t_table_NUMBER as table of number;
1)定义一个传入字符串参数,传入CSV格式串
2)在程序中实例化表变量,然后分析字符串参数,得到若干元素,逐一保存到该表中;
3)查询时使用 ... in (select * from table(v_tab)
解析的代码可以参考 hanjs的博客 http://hanjs.itpub.net/post/28217/260065
补充一点:如果集合类型是字符串,也就是均以字母开头,可以用dbms_utility.comma_to_table 将CSV串转换到一个Index_by表中。但table()函数不支持Index_by表,必须写代码将Index_by表复制到一个嵌套表或VARRAY表中。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-579987/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9844649/viewspace-579987/