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