oracle中字符串分解为数组并遍历数组插入表中

1、定义一个自定义类型

CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
2、定义一个函数

复制代码
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);

  WHILE j < len
  LOOP
      j := INSTR (p_str, p_delimiter, i);

      IF j = 0
      THEN
          j := len;
        str := SUBSTR (p_str, i);
        PIPE ROW (str);

          IF i >= len
          THEN
            EXIT;
        END IF;
      ELSE
        str := SUBSTR (p_str, i, j - i);
        i := j + len1;
        PIPE ROW (str);
    END IF;
END LOOP;

  RETURN;

END fn_split;
复制代码
3、字符串数组的应用

复制代码
/*
description:车机联控下发到责任单位
*/
PROCEDURE CJLK_UNIT_DOWN(
P_ERRCD IN OUT NUMBER,
P_ERRMSG IN OUT VARCHAR2,
P_CJLK_XH IN VARCHAR2,
P_JSDWBH IN VARCHAR2,
P_JSDWMC IN VARCHAR2,
P_ZT IN VARCHAR DEFAULT ‘A’
)AS
CURSOR L_JSDWBH IS SELECT * FROM TABLE (CAST (FN_SPLIT(P_JSDWBH,’;’) AS ty_str_split));
BEGIN
P_ERRCD:=0;
P_ERRMSG:=”;
UPDATE AQGL.CJLK SET JSDWBH=P_JSDWBH,JSDWMC=P_JSDWMC,ZT=’B’ WHERE XH=P_CJLK_XH;
FOR I IN L_JSDWBH LOOP
INSERT INTO AQGL.CJLK_DWFK (XH,PID,JSDWBH,JSDWMC,ZT)
VALUES (sys_guid(),P_CJLK_XH,I.COLUMN_VALUE,GET_DWMC(i.column_value),P_ZT);
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
P_ERRCD:=SQLCODE;
P_ERRMSG:=SQLERRM;
END;
复制代码
其中P_JSDWBH包含了多个用;分隔的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值