Oracle 存储过程 split 代码实现
实现 字符串分割, 算法 如下:
算法 1:
DECLARE
remove_column myvarray_list;
x varchar(1000);
sub varchar(1000);
i NUMBER;
j NUMBER;
c NUMBER;
rcount NUMBER;
BEGIN
remove_column := myvarray_list(); --init array. sub:='ORA-26786: 键为 ("AAC001") = (11370911196606055225) 的行存在, 但具有冲突列 "AAC003", "AAE011", "AAE036", "AAE476" (在表 BI3.AC01 中)ORA-01403: 未找到任何数据';
--sub:='ORA-26786: A row with key ("C1", "C2") = (TEST1, TEST1) exists but has conflicting column(s) "C4" in table SK.T1 ORA-01403: no data found';
i:= INSTR(sub,'=',1, 1);
sub := SUBSTR(sub, i);
i:= INSTR(sub,' "',1, 1);
sub := SUBSTR(sub, i);
i := INSTR(sub,'"',-1, 1);
sub := SUBSTR(sub, 1,i);
sub:=REPLACE(sub,'"','');
sub:=REPLACE(sub,' ','');
--DBMS_OUTPUT.PUT_LINE(sub);
------------------------------------------------------------
j:=1;
rcount :=1;
WHILE INSTR(sub,',',1, j) !=0 LOOP
i := INSTR(sub,',',1, j);
IF j = 1 THEN
c :=1;
ELSE
c :=1+ INSTR(sub,',',1, j-1);
END IF;
x := SUBSTR(sub,c,i-c);
j:=j+1;
--DBMS_OUTPUT.PUT_LINE(x);
remove_column.extend;
remove_column(rcount) := x;
rcount :=rcount+1; END LOOP;
IF j > 1 THEN
i := INSTR(sub,',',1, j-1);
x := SUBSTR(sub,i+1);
--DBMS_OUTPUT.PUT_LINE(x);
ELSE
x := sub;
--DBMS_OUTPUT.PUT_LINE(x);
END IF;
remove_column.extend;
remove_column(rcount) := x; FOR x in 1..remove_column.count loop
dbms_output.put_line(remove_column(x));
END loop;
END;
算法 2:
DECLARE
str_split myvarray_list;
p_str varchar(1000);
j INT := 0;
i INT := 1;
lens INT := 0;
lenp INT := 0;
p_delimiter VARCHAR(1) := ',';
str VARCHAR2 (1000);
BEGIN
str_split := myvarray_list(); --init array. p_str:='ORA-26786: 键为 ("AAC001") = (11370911196606055225) 的行存在, 但具有冲突列 "AAC003", "AAE011", "AAE036", "AAE476" (在表 BI3.AC01 中)ORA-01403: 未找到任何数据';
--p_str:='ORA-26786: A row with key ("C1", "C2") = (TEST1, TEST1) exists but has conflicting column(s) "C4", "C3" in table SK.T1 ORA-01403: no data found';
i:= INSTR(p_str,'=',1, 1);
p_str := SUBSTR(p_str, i);
i:= INSTR(p_str,' "',1, 1);
p_str := SUBSTR(p_str, i);
i := INSTR(p_str,'"',-1, 1);
p_str := SUBSTR(p_str, 1,i);
p_str:=REPLACE(p_str,'"','');
p_str:=REPLACE(p_str,' ','');
------------------------------------------------------------
lens := LENGTH (p_str);
lenp := LENGTH (p_delimiter);
dbms_output.put_line(lens);
i := 1;
j :=0; WHILE j < lens LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0 THEN
j := lens;
str := SUBSTR (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str;
IF i >= lens
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + lenp;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP; FOR x in 1..str_split.count loop
dbms_output.put_line(str_split(x));
END loop;
END;
Oracle 存储过程 split 代码实现的更多相关文章
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
- java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- oracle存储过程结合我公司代码1
1. Framework.QueryInfo info1 = new Framework.QueryInfo(); //string Sql = Holwor ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
- Oracle存储过程基本语法介绍
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- Oracle存储过程(转)
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
随机推荐
- GCD: 基本概念和Dispatch Queue 【转】
什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...
- oracle实现split函数功能
转载: http://blog.csdn.net/jojo52013145/article/details/6758279在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 R ...
- ReportViewer改变图表类型
/// <summary> /// 切换成柱状图 /// </summary> /// <param name="sender"&g ...
- redis 原子增一的妙用
有这样一个需求,插入数据库之前需要了解数据库ID号,考虑到不同的主机怎么去协同这个ID呢 同时要保证每个主机分到不同的ID号,这个比较麻烦,如果独立开一个服务来一个C/S操作比较麻烦,幸好REDIS提 ...
- 提升Nginx+PHP-FPM性能技巧
/etc/php-fpm.d 2.1进程数 php-fpm初始/空闲/最大worker进程数 pm.max_children = 300 pm.start_servers = ...
- JS中this的值到底为何?
之前很久的时间,因为研究不深,对于this的值一直模模糊糊,不是很清楚,最近有空做了一些研究,终于彻底弄明白了this到底为何物. 首先, 先抛出一个定论:”在Javascript中,this关键字永 ...
- Android应用开发是否应避免使用枚举?
在Android Froyo版本之前, 官方文档Performance Tips中有"Avoid Enums Where You Only Need Ints", 后来该部分被去掉 ...
- 评价qq拼音输入法
我目前正在使用qq拼音输入法,从人机交互设计方面,我对qq输入法从用户界面.记住用户选择.短期刺激和长期使用的好处坏处.不让用户犯简单错误这四个方面进行了评价. 1.从用户界面方面: qq输入法用户界 ...
- SolidWorks的简单介绍及基本用法
写这博客的动机来源于构建之法微信群里面的的一位老师.sw是一个强大的机械设计制图软件,我记得大一的时候学制图学的3d软件是inventor,而后发现sw用起来更方便更高效,于是就自学了sw,由于是自学 ...
- 【Cocos2d-x 3.x】 调度器Scheduler类源码分析
非个人的全部理解,部分摘自cocos官网教程,感谢cocos官网. 在<CCScheduler.h>头文件中,定义了关于调度器的五个类:Timer,TimerTargetSelector, ...