PLSQL 实现split
2015-11-20 15:36
435 查看
PLSQL 实现split:
FUNCTION Get_Field_Value
(
in_str IN VARCHAR2,
findstr IN VARCHAR2,
field IN INTEGER
) RETURN VARCHAR2 AS
tmp_msg VARCHAR2(20);
-- 取字段 值 ,field start from 0
startidx INTEGER;
endidx INTEGER;
BEGIN
startidx := 1;
endidx := 1;
FOR i IN 1 .. field
LOOP
--INSTR(in_string,'|',tmp_pos);
--substr(in_string,tmp_pos,tmp_pos1-tmp_pos);
IF i > 1 THEN
startidx := INSTR(in_str, findstr, startidx);
IF startidx = 0 THEN
RETURN NULL;
END IF;
startidx := startidx + length(findstr);
END IF;
END LOOP;
endidx := INSTR(in_str, findstr, startidx);
IF endidx = 0 THEN
endidx := length(in_str) + 1;
END IF;
RETURN substr(in_str, startidx, endidx - startidx);
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
例二
TYPE ARRAY IS TABLE OF VARCHAR2(255);
FUNCTION SPLIT(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2) RETURN ARRAY IS
J INT := 0;
I INT := 1;
LEN INT := 0;
LEN1 INT := 0;
STR VARCHAR2(4000);
STR_SPLIT ARRAY := ARRAY();
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);
STR_SPLIT.EXTEND;
STR_SPLIT(STR_SPLIT.COUNT) := STR;
IF I >= LEN THEN
EXIT;
END IF;
ELSE
STR := SUBSTR(P_STR, I, J - I);
I := J + LEN1;
STR_SPLIT.EXTEND;
STR_SPLIT(STR_SPLIT.COUNT) := STR;
END IF;
END LOOP;
RETURN STR_SPLIT;
END SPLIT;
调用:
STR_SPLIT := SPLIT('A,B,C,D,E,F', ',');
FOR I IN 1 .. STR_SPLIT.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
FUNCTION Get_Field_Value
(
in_str IN VARCHAR2,
findstr IN VARCHAR2,
field IN INTEGER
) RETURN VARCHAR2 AS
tmp_msg VARCHAR2(20);
-- 取字段 值 ,field start from 0
startidx INTEGER;
endidx INTEGER;
BEGIN
startidx := 1;
endidx := 1;
FOR i IN 1 .. field
LOOP
--INSTR(in_string,'|',tmp_pos);
--substr(in_string,tmp_pos,tmp_pos1-tmp_pos);
IF i > 1 THEN
startidx := INSTR(in_str, findstr, startidx);
IF startidx = 0 THEN
RETURN NULL;
END IF;
startidx := startidx + length(findstr);
END IF;
END LOOP;
endidx := INSTR(in_str, findstr, startidx);
IF endidx = 0 THEN
endidx := length(in_str) + 1;
END IF;
RETURN substr(in_str, startidx, endidx - startidx);
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
例二
TYPE ARRAY IS TABLE OF VARCHAR2(255);
FUNCTION SPLIT(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2) RETURN ARRAY IS
J INT := 0;
I INT := 1;
LEN INT := 0;
LEN1 INT := 0;
STR VARCHAR2(4000);
STR_SPLIT ARRAY := ARRAY();
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);
STR_SPLIT.EXTEND;
STR_SPLIT(STR_SPLIT.COUNT) := STR;
IF I >= LEN THEN
EXIT;
END IF;
ELSE
STR := SUBSTR(P_STR, I, J - I);
I := J + LEN1;
STR_SPLIT.EXTEND;
STR_SPLIT(STR_SPLIT.COUNT) := STR;
END IF;
END LOOP;
RETURN STR_SPLIT;
END SPLIT;
调用:
STR_SPLIT := SPLIT('A,B,C,D,E,F', ',');
FOR I IN 1 .. STR_SPLIT.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
相关文章推荐
- mongodb 在Linux下的增删改查和用nodejs连接mongodb
- Oracle中的for和while循环
- oracle 四舍五入 取得的数值
- pl/sql中尽量别用&符号
- Oracle中生成随机数的函数
- MySQL学习笔记(一)
- 数据库的最简单实现
- MongoDB的真正性能
- mongodb 数据库学习
- jdbc操作mysql数据库
- Oracle & PL/SQL(71),大全
- SQLite初步学习总结
- RAD Studio 10 免费培训之支持 NoSQL 的 MongoDB——讲义及范例程序下载
- sql 的join on 和 where 区别
- 数据库 时间日期函数
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
- mysql存储过程案例
- SQL 判断表是否存在
- Node.js创建数据库连接池
- Oracle 补丁全集 (Oracle 9i 10g 11g Path)