在平常的工作中,经常会对字符串进行操作,在此写简单的工具类。
目前包括:
1:fn_split,将由分隔符组成的字符转换成集合类型。
2:fn_contact,将集合里的字符串拼接成一个字符串。
创建PKG定义:
创建BODY:
测试代码:
执行效果:
目前包括:
1:fn_split,将由分隔符组成的字符转换成集合类型。
2:fn_contact,将集合里的字符串拼接成一个字符串。
创建PKG定义:
create or replace package character_util is --构建集合类型 DBMS_UTILITY TYPE t_Array IS TABLE OF VARCHAR2(4000) index by binary_integer; --默认的分隔符 C_SEPARATOR CONSTANT VARCHAR2(1 CHAR) := ','; /** -- Purpose 实现类似java的split函数,返回集合类型 -- parameter pi_str需要操作的字符串 -- parameter pi_separator 分隔符 **/ function fn_split(pi_str Varchar2, pi_separator Varchar2 default C_SEPARATOR) RETURN t_Array; /** -- Purpose 实现将集合中的字符用连接符串联,返回字符串类型 -- parameter pi_collect 集合 -- parameter pi_conj_char 连接符 **/ function fn_contact(pi_collect t_Array, pi_conj_char varchar2 default C_SEPARATOR) return varchar2; end character_util;
创建BODY:
create or replace package body character_util is FUNCTION fn_split(pi_str Varchar2, pi_separator Varchar2 default C_SEPARATOR) RETURN t_Array IS --分隔符在字符串中的位置 idx Number; --数组的索引 currentindex Number := 1; --返回值 l_ret t_Array; --临时变量 v_str varchar2(32767) := pi_str; BEGIN IF pi_str IS NOT NULL AND pi_separator IS NOT NULL THEN --存在分隔符 IF INSTR(v_str, pi_separator) <> 0 THEN LOOP EXIT WHEN v_str IS NULL; EXIT WHEN INSTR(v_str, pi_separator) = 0; idx := INSTR(v_str, pi_separator); --截取字符串赋值给对应的数组 l_ret(currentindex) := SUBSTR(v_str, 0, idx - 1); currentindex := currentindex + 1; --更新字符串 v_str := SUBSTR(v_str, idx + 1); END LOOP; END IF; END IF; --如果分隔符为空,则直接返回字符串 IF v_str IS NOT NULL THEN l_ret(currentindex) := v_str; END IF; Return l_ret; END fn_split; function fn_contact(pi_collect t_Array, pi_conj_char varchar2 default C_SEPARATOR) return varchar2 is --返回值 l_ret varchar2(50 char); begin --遍历集合 for i in pi_collect.first .. pi_collect.count loop --进行字符串拼接 --当拼接后的长度不会超过返回变量所定义的长度时才允许往后添加 --暂时不知如何获取l_ret所定义的长度,故写硬代码50在此 if length(l_ret || pi_conj_char || pi_collect(i)) <= 50 then if i > 1 then l_ret := l_ret || pi_conj_char || pi_collect(i); else l_ret := pi_collect(i); end if; end if; end loop; return l_ret; end fn_contact; end character_util;
测试代码:
declare --fn_contact函数的入参 l_collect scott.character_util.t_Array; --fn_contact函数的返回值 l_char varchar2(32767); --fn_split函数的返回值 l_ret_collect scott.character_util.t_Array; begin --准备数据 select t.ename bulk collect into l_collect from scott.emp t; --调用fn_contact,获取返回值 l_char := scott.character_util.fn_contact(l_collect); --打印拼接好的字符串 dbms_output.put_line('fn_contact的效果;'); dbms_output.put_line(l_char); --将上面的返回值作为fn_split的入参 l_ret_collect := scott.character_util.fn_split(l_char); dbms_output.put_line(''); dbms_output.put_line('fn_split的效果;'); --遍历fn_split返回的集合数据 for i in l_ret_collect.first .. l_ret_collect.count loop dbms_output.put_line('Index:' || i || '=' || l_ret_collect(i)); end loop; end;
执行效果:
发表评论
-
ORACLE数据库集合类型示例
2014-06-04 18:09 959declare --------类型定义 -- ... -
PCTFREE、PCTUSED
2013-06-28 22:34 892PCTFREE:块中保留用于UPDATE操作的空间百分比,当数 ... -
Oracle expdp/impdp工具使用(转)
2013-06-15 10:36 629原文地址:http://blog.csdn.net/index ... -
SCN跟TIMESTAMP之间转换
2012-11-21 14:17 739--获取当前的SCN select dbms_flash ... -
oracle 全文检索示例(转)
2012-11-21 10:53 893感谢作者,原文地址:http://www.iteye.com/ ... -
ROLLUP\CUBE简单例子
2012-09-23 12:30 595简介: 一、资源准备: 1:建表 create ... -
LAG\LEAD用法
2012-09-23 11:56 743简介: 偏移量函数,可以实现将当前记录的(前、后)记录的字段值 ... -
大数据量导入方法
2012-08-12 13:10 547一、大数据量进行MERGE操作 前置条件:目标表数据大、需更新 ... -
利用ROW_NUMBER()函数实现按条件分组排序
2012-07-28 13:35 1041背景: 我想删除表中的重复数据,但是我又想以某些条件进行排序, ... -
wmsys.wm_concat多行文本连接
2012-06-17 13:19 598一、背景: 当需要对某个分组下的部分字段拼接起来在同一 ... -
ORA_HASH函数
2012-04-03 11:01 5315用ora_hash函数可以对列进行分组: 例:按员工 ... -
ORACLE伪列
2012-02-12 19:03 836一、ORA_ROWSCN (10g or later) 。 ... -
应用系统性能优化的思路
2011-11-19 11:59 629一、需求分析、设计方面: 1:需求的必要性 2:实 ... -
rank、dense_rank、row_number
2011-09-18 15:15 897三者主要区别在于对相同序号后的下一行记录的处理。 1 ... -
常用EXCEPTION
2011-09-17 16:19 492Error Code Prefix In ... -
ORACLE 错误信息速查
2011-09-04 13:10 2481ORA-01006: Bind variable does n ... -
Current of Cursor示例
2011-06-26 10:36 1163我觉得current of的最大好处就是,当要写巨多where ... -
自定义过程ORACLE KILL SESSION
2011-06-26 09:50 1100我觉得这个可以是一个小工具,所有我授权给了所有人(不过这也很危 ... -
Oracle 查询死锁对象(摘)
2011-05-14 10:01 1123查询死锁: select object_name, ... -
将表导出为dmp文件
2011-02-14 21:32 898Windows 命令行下: exp user/passwor ...
相关推荐
2. **连接字符串(Connection String)**:在TNS文件中,每个数据库都有一个唯一的名称,称为服务名(Service Name)。在PL/SQL Developer中,你需要输入这个服务名以及相应的连接参数,如主机名、端口号和数据库...
2. **变量和数据类型**:PL/SQL支持多种数据类型,如数值型(NUMBER)、字符串型(VARCHAR2、CHAR)、日期型(DATE)以及布尔型(BOOLEAN)。变量的声明和初始化是编写PL/SQL程序的基础。 3. **流程控制**:PL/SQL...
需要注意的是,在PL/SQL中只能使用SQL的DML(Data Manipulation Language)部分,而不能直接使用DDL(Data Definition Language)部分,如创建表(CREATE TABLE)等操作。如果需要在PL/SQL中执行DDL操作,则需要通过...
8. **动态SQL**:有时你需要在运行时构建SQL语句,这可以通过EXECUTE IMMEDIATE语句实现,它允许你动态执行字符串形式的SQL。 9. **包(Package)**:包是一种组织PL/SQL对象(如过程、函数、变量)的方式,可以...
最后,还有关于字符串、数值、日期等数据类型的函数介绍,以及SELECT语句的不同使用方法,如合并查询、SELECT INTO、删除、修改、用户管理、添加数据、设置保存点和事务处理等。 这本书籍将为读者提供一个全面、...
字符串分割,..........................................
例如,PL/SQL中的块由BEGIN、END语句界定,变量和常量用于存储数据,数据类型包括数字、字符串、日期等。 2. **流程控制**:PL/SQL提供了多种流程控制结构,如条件语句(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR、...
使用工具和技巧来优化PL/SQL性能,例如PL/Scope和PL/SQL中的层次化profiler。 ? 探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、...
11. **实用程序和内置函数**:熟悉Oracle提供的各种内置函数,如数学函数、字符串函数、日期时间函数等,以及如何利用它们增强PL/SQL代码的功能。 12. **数据库对象的DDL操作**:学习如何在PL/SQL中创建、修改和...
关联数组是一种允许以任意字符串作为索引的数组,常用于将PL/SQL表与程序中的数组结构相对应。关联数组的操作包括遍历、添加元素、修改元素和删除元素等。 异常处理是PL/SQL的一个重要特性。PL/SQL定义了多种类型的...
第二章“访问Oracle”将探讨如何通过PL/SQL连接到Oracle数据库,使用连接字符串、用户认证和游标来操作数据。这部分内容对于理解如何在PL/SQL环境中执行数据库查询至关重要。 第三章“控制结构”深入讲解了PL/SQL中...
在 PL/SQL 中,可以使用各种表达式来操作变量,例如赋值、比较、逻辑等。表达式可以是简单的,也可以是复杂的,例如使用函数、过程等。 六、变量定义规范 在 PL/SQL 中,变量的定义需要遵守一定的规范。变量的名称...
TRIM 函数在 T-SQL 中用于删除字符串两端的空格,在 PL/SQL 中使用 RTRIM 和 LTRIM 函数来删除字符串两端的空格。 SUBSTRING 函数在 T-SQL 中用于提取字符串的一部分,在 PL/SQL 中使用 SUBSTR 函数。 INSTR 函数...
2. **数据类型**:PL/SQL有多种内置数据类型,如NUMBER(数字)、VARCHAR2(可变长度字符串)、DATE(日期时间)、BOOLEAN(布尔值)等。此外,还可以定义对象类型和复合类型。 3. **流程控制**:包括条件语句(IF-...
PL/SQL客户端是一种用于与Oracle数据库进行交互的工具,它主要面向开发人员和数据库管理员,提供了编写、测试和执行PL/SQL(Oracle的结构化查询语言扩展)代码的环境。标题提到的“pl/sql客户端”可能指的是Oracle的...
《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...
2. **数据类型**:PL/SQL有丰富的内置数据类型,包括数值类型(如NUMBER、INTEGER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)等。 3. **控制流程语句**:包括条件判断(IF-...
2. **数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)以及复合数据类型(如记录和数组)。 3. **变量声明和赋值**...
标签中的"PL/SQL Developer 插件"进一步强调了这是针对PL/SQL Developer软件的扩展功能,而不是其他开发工具。PL/SQL Developer的插件系统允许用户根据自身需求安装和配置不同的插件,以增强其核心功能。 在压缩包...
PL/SQL(Procedural Language for Oracle)作为Oracle数据库的一种强大工具,提供了丰富的功能来处理字符串,包括分割、连接、替换等操作。本文将深入探讨如何在PL/SQL中实现字符串的分割,并通过具体代码示例进行...