ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何传集合型参数

如何传集合型参数

原创 Linux操作系统 作者:davidyu720 时间:2019-07-13 16:36:06 0 删除 编辑

想传入查询参数到存储过程中,但参数代表一个集合。不知该如何实现。

首先是参数用什么类型?然后是在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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-18

  • 博文量
    235
  • 访问量
    180879