我有一個類似這樣的值的分隔字符串:00,45,50,66,84,99。該字符串作爲IN參數傳遞給DB2存儲過程。在這個過程中,我想遍歷這個字符串並將每個值插入一個臨時表中。我對DB2循環語法的瞭解很少,而且我一直在爲此苦苦掙扎。任何幫助將不勝感激,謝謝!在DB2中循環遍歷分隔字符串
1
A
回答
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 [email protected]
<Copy, paste> in the interactive mode + quit
db2 call rec ('00,45,50,66,84,99')
db2 select * from table
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. 在PowerBuilder中循環遍歷字符串
- 2. 在mySQL中循環遍歷可能的逗號分隔字符串
- 3. 循環遍歷字符串變量R
- 4. 循環遍歷循環並返回數組中的字符串
- 5. 拆分字符串並循環遍歷MySql中的值過程
- 6. 循環遍歷字符串中的字符,NewLISP
- 7. 循環遍歷數組並找到部分字符串
- 8. 將字符串拆分爲數組並循環遍歷它MYSQL
- 9. JS - 分割一個字符串並循環遍歷結果
- 10. 遍歷Crystal 2011中具有逗號分隔符的字符串
- 11. 在Swift 3.0中循環遍歷子字符串
- 12. 在程序集中循環遍歷字符串
- 13. 循環遍歷數組以獲取字符串中的數字
- 14. 循環字符串分隔空間
- 15. 循環遍歷所有Unicode字符
- 16. 在jQuery中循環遍歷
- 17. 在ruby中循環遍歷
- 18. 在jQuery中循環遍歷?
- 19. 在PL/SQL中循環遍歷字
- 20. 在Python中循環遍歷數字
- 21. 遍歷字符串
- 22. DotLiquid:循環遍歷模板中的(包裝)字典<字符串,字符串> for for循環
- 23. 如何根據DB2中的分隔符分割字符串值
- 24. 循環遍歷字符串數組以匹配模式
- 25. 循環遍歷字符串(迭代圖像)
- 26. 循環遍歷一個JSONArray將字符串轉換爲對象
- 27. 使用字符串循環遍歷一系列行
- 28. 循環遍歷所有可能的字符串的長度n
- 29. 遍歷字符串併合並每個循環中的前幾個字符
- 30. 如何使用JSTL循環遍歷字符串中的每個字符?
循環在SQL一般通常是一個壞主意,雖然這通常是指與錶行,而不是SP的搞亂。儘管如此,將它粘貼到臨時表中可能會有問題;我想我寧願返回一組行。 _爲什麼你有一個限定的值列表?如果這是來自外部資源(例如來自程序的查詢),爲什麼不使用數組(大多數驅動程序都支持)?如果這是內部的(例如表格中的列),那麼最好將數據標準化以便查詢。 –
我使用分隔字符串作爲使用IN函數的替代方法,該函數不能應用於分隔參數。作爲解決方法,我的目標是使用分隔值填充臨時表,然後使用我的光標結果內部連接它以充當過濾器。 – Ted
我知道的大多數驅動程序/框架(對於Java和C#而言,至少)都會接受一個數組,用於'IN()'子句中的值列表。什麼語言叫你的陳述,陳述是什麼,你在什麼平臺等等?而且我仍然強烈地提醒你臨時表 - 如果你需要爲兩組不同的參數使用同一個函數,會發生什麼?就此而言,您可能可以使用遞歸CTE來分割字符串,但我認爲SP將是最乾淨的解決方案。 –