我有一个分隔的值字符串,如:00,45,50,66,84,99。此字符串作为IN参数传递给DB2存储过程。在该过程中,我想循环遍历此字符串并将每个值插入临时表。我对DB2循环语法的了解很差,而且我一直在努力解决这个问题。非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
有时我在XQuery中使用高级函数。你可以使用像
这样的东西SELECT XMLQuery('$PORDER/PurchaseOrder/item/name' PASSING porder AS "PORDER")
FROM purchaseorder
并在引号之间放置复杂的XQuery表达式。
然后,您可以将其包装在XMLCAST中,以将其转换回SQL数据类型。我最近这样做是为了将长十六进制字符串转换为二进制,因为XQuery有一个函数。
SELECT XMLCAST(XMLQuery( ....) AS VARCHAR(100)) .....
答案 1 :(得分:0)
您可以定义一个递归SP,它接受IN varchar,处理第一个元素,并对其余元素进行递归调用。
CREATE OR REPLACE PROCEDURE REC (
IN STRING VARCHAR(256)
)
P_REC: BEGIN
DECLARE INDEX SMALLINT;
DECLARE PRE VARCHAR(256);
DECLARE POS VARCHAR(256);
DECLARE STMT STATEMENT;
PREPARE STMT FROM 'CALL REC(?)';
SET INDEX = POSSTR (STRING, ',');
IF (INDEX <> 0) THEN
SET PRE = SUBSTR(STRING, 1, INDEX - 1);
INSERT INTO table
VALUES (PRE);
-- Recursive call
SET POS = SUBSTR(STRING, INDEX + 1);
EXECUTE STMT USING POS;
ELSE
INSERT INTO table
VALUES (STRING);
END IF;
END P_REC @
使其从db2clp开始工作:
db2 create table table (string varchar(256))
db2 -td@
<Copy, paste> in the interactive mode + quit
db2 call rec ('00,45,50,66,84,99')
db2 select * from table