plsql分割字符串之PIPE

此示例是将一个字符串根据指定的分隔符分割成多列数据...

  • 输入参数p_value是要分割的字符串。
  • 输入参数p_split是用作分隔符的字符,默认值为逗号(,
  1. 创建type
CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (500)

     2.创建Function

CREATE OR REPLACE FUNCTION SPLIT_STR(
  P_VALUE IN VARCHAR2,  -- 输入参数,需要分割的字符串
  P_SPLIT IN VARCHAR2 := ','  -- 输入参数,用作分隔符,默认为逗号
)
RETURN SPLIT_TYPE  -- 指定返回类型
PIPELINED IS
  V_IDX INTEGER;  -- 用于存储分隔符位置的索引变量
  V_STR VARCHAR2(500);  -- 用于存储每次分割得到的字符串段
  V_STRS_LAST VARCHAR2(4000) := P_VALUE;  -- 存储原始字符串的副本,用于分割

BEGIN
  V_STRS_LAST := REPLACE(V_STRS_LAST, '";"', ',');

  -- 开始循环,直到没有更多的分隔符
  LOOP
    -- 找到分隔符的位置
    V_IDX := INSTR(V_STRS_LAST, P_SPLIT);
    -- 如果分隔符不存在,则退出循环
    EXIT WHEN V_IDX = 0;
    -- 根据分隔符位置提取子字符串
    V_STR := SUBSTR(V_STRS_LAST, 1, V_IDX - 1);
    -- 更新 V_STRS_LAST 为剩余的字符串部分,移除已处理的部分
    V_STRS_LAST := SUBSTR(V_STRS_LAST, V_IDX + 1);
    -- 将提取的子字符串作为结果输出
    PIPE ROW(V_STR);
  END LOOP;
  -- 输出最后一个分割得到的字符串段
  PIPE ROW(V_STRS_LAST);
  -- 结束函数,返回结果
  RETURN;
END SPLIT_STR;

  3.测试代码

DECLARE
  v_result SPLIT_TYPE;
  v_row SPLIT_TYPE; -- 声明变量以存储从游标中检索的行
BEGIN
  -- 调用 SPLIT_STR 函数并初始化结果集变量
  SELECT * BULK COLLECT INTO v_result
  FROM TABLE(SPLIT_STR('apple,banana,cherry,date'));
  -- 遍历结果集并打印每一行
  FOR i IN 1 .. v_result.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Level: ' || i || '  V_LINE: ' || v_result(i));
  END LOOP;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
END;

  4.测试结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值