如何在PL/SQL中将拆分后的键值对字符串存入数组
PL/SQL拆分键值对字符串并存入数组
你已经通过正则拆分得到了正确的键值对结果,以下是两种将这些结果存入数组的实现方式,方便后续验证:
方式1:使用自定义记录数组(有序存储)
先定义记录类型和数组类型,再通过BULK COLLECT一次性将查询结果存入数组:
DECLARE -- 定义键值对记录类型 TYPE kv_pair IS RECORD ( key VARCHAR2(100), value VARCHAR2(100) ); -- 定义键值对数组类型 TYPE kv_array IS TABLE OF kv_pair; v_kv_array kv_array; BEGIN -- 拆分字符串并批量存入数组 SELECT trim(regexp_substr(str1,'[^:]+', 1, 1)) AS key, trim(regexp_substr(str1,'[^:]+', 1, 2)) AS value BULK COLLECT INTO v_kv_array FROM ( SELECT trim(regexp_substr(str,'[^$]+', 1, level)) AS str1 FROM ( SELECT 'key1:string$key2:bring$key3:T-ring$' AS Str FROM dual ) CONNECT BY regexp_substr(str, '[^$]+', 1, level) IS NOT NULL ); -- 遍历数组验证内容 FOR i IN 1..v_kv_array.COUNT LOOP DBMS_OUTPUT.PUT_LINE('Key: ' || v_kv_array(i).key || ', Value: ' || v_kv_array(i).value); END LOOP; END; /
方式2:使用关联数组(按键索引,方便快速取值验证)
关联数组以键作为索引,适合直接通过键名获取对应值:
DECLARE -- 定义关联数组类型(字符串键 -> 字符串值) TYPE kv_assoc_array IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100); v_kv_assoc kv_assoc_array; BEGIN -- 拆分字符串并填充关联数组 FOR rec IN ( SELECT trim(regexp_substr(str1,'[^:]+', 1, 1)) AS key, trim(regexp_substr(str1,'[^:]+', 1, 2)) AS value FROM ( SELECT trim(regexp_substr(str,'[^$]+', 1, level)) AS str1 FROM ( SELECT 'key1:string$key2:bring$key3:T-ring$' AS Str FROM dual ) CONNECT BY regexp_substr(str, '[^$]+', 1, level) IS NOT NULL ) ) LOOP v_kv_assoc(rec.key) := rec.value; END LOOP; -- 直接通过键名验证内容 DBMS_OUTPUT.PUT_LINE('key1对应的值: ' || v_kv_assoc('key1')); DBMS_OUTPUT.PUT_LINE('key2对应的值: ' || v_kv_assoc('key2')); DBMS_OUTPUT.PUT_LINE('key3对应的值: ' || v_kv_assoc('key3')); END; /
内容的提问来源于stack exchange,提问作者Abhishek Chhabra
相关产品推荐
相关产品推荐

