如何将输入参数作为由逗号或列表分隔的字符串传递给DB2中的IN子句

时间:2013-07-22 09:45:03

标签: database stored-procedures db2

我是存储过程的新手,我有一个疑问,我需要将输入参数作为由逗号分隔的字符串或DB2中的IN子句列表。请参阅以下示例程序

 CREATE PROCEDURE  TEST_SP(IN  @listofUsername)
  SPECIFIC TEST_SP DYNAMIC RESULT SETS 1
P1:BEGIN
  DECLARE CURSOR1 CURSOR WITH RETURN FOR  
  SELECT  F_NAME FROM TEST  WHERE USER_NAME IN (@listofusername);
    }
    OPEN CURSOR1;  
END P1 

请指导我, 1如何编写上面的存储过程 2是否可以将任何类型的列表作为输入参数传递,如果是,哪一个将提供更好的性能。

2 个答案:

答案 0 :(得分:1)

您可以创建数组数据类型,并将参数定义为该数据类型。

CREATE OR REPLACE TYPE UserList as char(10) ARRAY[100]

我选择了char(10)因为这就是我们系统上的所有东西,IBM i。使用适合您的任何东西,以及足够大的数组大小,以满足您的任何用途。

使用此作为过程参数的类型。

答案 1 :(得分:0)

这样的事情:

Select f_name from test1 
where CONCAT(',',@listofusername,',')  LIKE CONCAT('%,',username,',%')