oracle以分隔符来循环字符串

CREATE OR REPLACE PROCEDURE TEST(P_DETAIL_RESULT_COUNT IN VARCHAR2) AS
  V_DETAIL_TYPE  VARCHAR2(64);
  V_RESULT_COUNT NUMBER(12);
  V_LEN          NUMBER;
  V_LAST_POS     NUMBER;
  V_POS          NUMBER;
  V_NUM          NUMBER;
  V_SUB_SIGN     VARCHAR2(1) := ',';
  V_EQUAL_SIGN   VARCHAR2(1) := '=';
  V_EQUAL_POS    NUMBER;
  V_DETAIL       VARCHAR2(128);
BEGIN

  V_LEN      := LENGTH(V_SUB_SIGN);
  V_LAST_POS := 1 - V_LEN;
  LOOP
    V_POS := INSTR(P_DETAIL_RESULT_COUNT, V_SUB_SIGN, V_LAST_POS + V_LEN);
    IF V_POS > 0 THEN
      --FOUND
      V_NUM := V_POS - (V_LAST_POS + V_LEN);
    ELSE
      --NOT FOUND
      V_NUM := LENGTH(P_DETAIL_RESULT_COUNT) + 1 - (V_LAST_POS + V_LEN);
    END IF;
 
    V_DETAIL := SUBSTR(P_DETAIL_RESULT_COUNT, V_LAST_POS + V_LEN, V_NUM);
   
    V_EQUAL_POS:=INSTR(V_DETAIL,V_EQUAL_SIGN);
    V_DETAIL_TYPE := SUBSTR(V_DETAIL,1,V_EQUAL_POS-1);
    V_RESULT_COUNT := SUBSTR(V_DETAIL,V_EQUAL_POS+1);
 
    EXIT WHEN V_POS = 0;
    V_LAST_POS := V_POS;
  END LOOP;

  COMMIT;
  --发生异常直接捕获
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    RAISE;
END;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值