00,45,50,66,84,99 のような値の区切り文字列があります。このストリングは、IN パラメーターとして DB2 ストアード・プロシージャーに渡されます。手順では、この文字列をループして、各値を一時テーブルに挿入したいと思います。DB2 ループ構文に関する私の知識は非常に乏しく、しばらくこれに苦労してきました。どんな助けでも大歓迎です、ありがとう!
3350 次
2 に答える
1
XQuery の高度な機能を使用することがあります。次のようなものを使用できます
SELECT XMLQuery('$PORDER/PurchaseOrder/item/name' PASSING porder AS "PORDER")
FROM purchaseorder
複雑な XQuery 式を引用符で囲みます。
その後、XMLCAST でラップして、SQL データ型に戻すことができます。XQueryにはそのための機能があるため、最近、長い16進文字列をバイナリに変換するためにこれを行いました。
SELECT XMLCAST(XMLQuery( ....) AS VARCHAR(100)) .....
于 2012-12-01T15:40:49.703 に答える
0
IN varchar を受け取り、最初の要素を処理し、残りを再帰的に呼び出す再帰的な SP を定義できます。
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
于 2012-12-01T21:26:29.427 に答える