2

我是存储过程的新手,我有一个疑问,我需要将输入参数作为用逗号分隔的字符串或 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 是否可以将任何类型的列表作为输入参数传递,如果可以,哪个会提供更好的性能。

4

2 回答 2

1

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

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

我选择 char(10) 是因为它们在我的系统 IBM i 上就是这样。使用适合您的任何东西,以及一个足够大的数组大小以供您使用。

将此用作过程参数的类型。

于 2013-07-22T11:50:41.353 回答
0

像这样的东西:

Select f_name from test1 
where CONCAT(',',@listofusername,',')  LIKE CONCAT('%,',username,',%')
于 2013-07-22T11:20:33.063 回答