1

00,45,50,66,84,99 のような値の区切り文字列があります。このストリングは、IN パラメーターとして DB2 ストアード・プロシージャーに渡されます。手順では、この文字列をループして、各値を一時テーブルに挿入したいと思います。DB2 ループ構文に関する私の知識は非常に乏しく、しばらくこれに苦労してきました。どんな助けでも大歓迎です、ありがとう!

4

2 に答える 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 に答える