oracle字符串分割函数

CREATE OR REPLACE TYPE mytable AS TABLE OF varchar2(100)

CREATE OR REPLACE FUNCTION SPLIT(SRC VARCHAR2, DELIMITER VARCHAR2)
  RETURN MYTABLE IS
  PSRC VARCHAR2(500);
  A    MYTABLE := MYTABLE();
  I    NUMBER := 1; -- 
  J    NUMBER := 1;
BEGIN
  PSRC := RTRIM(LTRIM(SRC, DELIMITER), DELIMITER);
  LOOP
    I := INSTR(PSRC, DELIMITER, J);
    --Dbms_Output.put_line(i); 
    IF I > 0 THEN
      A.EXTEND;
      A(A.COUNT) := TRIM(SUBSTR(PSRC, J, I - J));
      J := I + 1;
      --Dbms_Output.put_line(a(a.Count-1)); 
    END IF;
    EXIT WHEN I = 0;
  END LOOP;
  IF J < LENGTH(PSRC) THEN
    A.EXTEND;
    A(A.COUNT) := TRIM(SUBSTR(PSRC, J, LENGTH(PSRC) + 1 - J));
  END IF;
  RETURN A;
END;

CREATE OR REPLACE FUNCTION SPLIT(SRC VARCHAR2, DELIMITER VARCHAR2) RETURN MYTABLE IS
PSRC VARCHAR2(500); A MYTABLE := MYTABLE(); I NUMBER := 1; --
J NUMBER := 1;
BEGIN
PSRC := RTRIM(LTRIM(SRC, DELIMITER), DELIMITER); LOOP I := INSTR(PSRC, DELIMITER, J);
--Dbms_Output.put_line(i);
IF I > 0 THEN A.EXTEND; A(A.COUNT) := TRIM(SUBSTR(PSRC, J, I - J)); J := I + 1;
--Dbms_Output.put_line(a(a.Count-1));
END IF; EXIT WHEN I = 0;
END LOOP; IF J < LENGTH(PSRC) THEN A.EXTEND; A(A.COUNT) := TRIM(SUBSTR(PSRC, J, LENGTH(PSRC) + 1 - J));
END IF; RETURN A;
END;
/

数组作为SELECT IN的查询条件

SELECT * FROM STUDENT WHERE ID IN (SELECT * FROM TABLE(CAST(SPLIT('001,002', ',') AS
MYTABLE))); SELECT * FROM STUDENT WHERE ID IN (SELECT * FROM TABLE(CAST(SPLIT('001,002', ',') AS
MYTABLE)));

SELECT * FROM STUDENT WHERE ID IN (SELECT ID FROM STUDENT WHERE ID = '001' UNION SELECT * FROM TABLE(CAST(SPLIT('001,002', ',') AS
MYTABLE))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值