You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:50:36