oracle 自定义字符串分割函数split()

1.情景展示

在Oracle当中,如果我们想要对字符串进行分割的话,如何实现?

2.具体分析

Oracle没有现成的内置函数,不过,我们可以自己手动创建一个split()。

如果不想创建函数的话,也可以通过别的方式来实现,具体办法,见文末推荐。

3.解决方案

第一步:创建TYPE类型

CREATE OR REPLACE TYPE TYPE_SPLIT AS TABLE OF VARCHAR2 (4000);

 意思是:创建了一个名为TYPE_SPLIT的TABLE类型。

第二步:创建SPLIT函数

CREATE OR REPLACE FUNCTION SPLIT(SPLIT_STRING VARCHAR2, SPLIT_DELIMITER VARCHAR2 := ',')
  RETURN TYPE_SPLIT
  PIPELINED IS
  IDX  PLS_INTEGER;
  V_STRING VARCHAR2(4000) := SPLIT_STRING;
BEGIN
  LOOP
    IDX := INSTR(V_STRING, SPLIT_DELIMITER);
    IF IDX > 0 THEN
      PIPE ROW(SUBSTR(V_STRING, 1, IDX - 1));
      V_STRING := SUBSTR(V_STRING, IDX + LENGTH(SPLIT_DELIMITER));
    ELSE
      PIPE ROW(V_STRING);
      EXIT;
    END IF;
  END LOOP;
END;

完成以上两步,split函数就可以正常使用了。

随后,我们在Functions当中就能够看到该函数啦。

4.效果展示

调用语法:

SELECT * FROM TABLE(SPLIT('待分割字符串','分隔符'))

 

 该表,有且只有一个字段:COLUMN_VALUE,我们可以对其设置别名。

该函数通常在存储过程当中使用,当然,也可以单独使用。

DECLARE
  -- 用于存储分隔后的值
  DEMO_SPLIT TYPE_SPLIT;
  -- 待分隔字符串
  STR        VARCHAR2(100) := '张三|李四|王五';
  -- 统计分隔符在字符串出现的次数
  TIMES      NUMBER;
BEGIN
  -- 将字符串进行分隔
  SELECT SPLIT(STR, '|') INTO DEMO_SPLIT FROM DUAL;
  --统计分隔符在字符串出现的次数
  TIMES := LENGTHB(TRANSLATE(STR, '|' || STR, '|'));
  -- 循环打印
  FOR I IN 1 .. TIMES + 1 LOOP
    DBMS_OUTPUT.PUT_LINE(DEMO_SPLIT(I));
  END LOOP;
END;

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-10-13 17:11  Marydon  阅读(8107)  评论(2编辑  收藏  举报