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

如何在PLSQL中按规则拆分逗号分隔字符串为多行结构化结果

PLSQL拆分键值对字符串实现方案

纯SQL查询实现

无需编写存储过程,直接通过递归CTE + 正则函数即可查询得到结构化结果:

WITH input_source AS (
    -- 此处可替换为实际的字符串来源,也可改为绑定变量
    SELECT 'M1: TestString1, M2: TestString2, M3: TestString3, M4: TestString4, M5: TestString5, M6: TestString6, M7: TestString7' AS raw_str
    FROM dual
),
split_kv_pairs AS (
    -- 按逗号拆分得到每一组独立的键值对
    SELECT
        LEVEL AS seq,
        REGEXP_SUBSTR(raw_str, '[^,]+', 1, LEVEL) AS kv_item
    FROM input_source
    CONNECT BY LEVEL <= REGEXP_COUNT(raw_str, ',') + 1
)
-- 按冒号拆分键值对得到两列结果
SELECT
    TRIM(REGEXP_SUBSTR(kv_item, '[^:]+', 1, 1)) AS code,
    TRIM(REGEXP_SUBSTR(kv_item, '[^:]+', 1, 2)) AS String
FROM split_kv_pairs;

PLSQL块遍历输出实现

如果需要在PLSQL逻辑中处理结果,可参考如下匿名块写法:

DECLARE
    v_raw_str VARCHAR2(1000) := 'M1: TestString1, M2: TestString2, M3: TestString3, M4: TestString4, M5: TestString5, M6: TestString6, M7: TestString7';
BEGIN
    -- 遍历查询结果输出
    FOR res IN (
        WITH split_kv_pairs AS (
            SELECT
                LEVEL AS seq,
                REGEXP_SUBSTR(v_raw_str, '[^,]+', 1, LEVEL) AS kv_item
            FROM dual
            CONNECT BY LEVEL <= REGEXP_COUNT(v_raw_str, ',') + 1
        )
        SELECT
            TRIM(REGEXP_SUBSTR(kv_item, '[^:]+', 1, 1)) AS code,
            TRIM(SUBSTR(kv_item, INSTR(kv_item, ':') + 1)) AS String
        FROM split_kv_pairs
    ) LOOP
        DBMS_OUTPUT.PUT_LINE('code: ' || res.code || ' | String: ' || res.String);
    END LOOP;
END;
/

注意:上述PLSQL块中拆分String列使用了SUBSTR + INSTR的写法,适配String值本身包含冒号的场景,比纯正则写法兼容性更强。

内容的提问来源于stack exchange,提问作者Pasha Md

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:02