oracle中字符串分解为数组并遍历数组插入表中
2017-09-04 09:26
411 查看
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);
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包含了多个用;分隔的字符串。
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包含了多个用;分隔的字符串。
相关文章推荐
- oracle中字符串分解为数组并遍历数组插入表中
- js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果
- 输入字符串,分解字符串数组
- oracle插入字符串数据时字符串中有'单引号问题
- iOS 遍历数组中查找字符串
- Oracle 11g插入中文字符串显示???
- java 字符串转成 json 数组并且遍历
- 向Oracle插入为null的字符串,提示“缺失标识符
- Oracle中数组的创建、赋值、遍历
- [Oracle]分割字符串返回数组
- PHP处理中文字符串中的特殊字符解决Oracle插入报错的问题
- 数组的添加、删除、排序、与字符串之间的转换、截取、查找、遍历操作总结!!!
- 用vba插入字符串到Oracle的BLOB字段
- oracle中将字符串转换成数组
- 分割字符串成数组并返回数组的长度(Oracle)
- 向Oracle插入为null的字符串,提示“缺失标识符
- thinkPHP 后台遍历数组 连接成字符串
- oracle怎么切割一个指定的字符串按指定的标志符分割成字符数组
- JSTL-1.2基础 c:forEach 遍历输出字符串数组
- Oracle将以特定分隔的字符串转成表格的方法(用于类似游标的遍历)