`
yhef
  • 浏览: 69707 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PL/SQL中操作字符串的工具方法

阅读更多
在平常的工作中,经常会对字符串进行操作,在此写简单的工具类。
目前包括:
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;



执行效果:




  • 大小: 20.2 KB
分享到:
评论

相关推荐

    Oracle资料学习PL/SQL必备

    2. **数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)以及复合数据类型(如记录和数组)。 3. **变量声明和赋值**...

    ORACLE PL/SQL从入门到精通

    最后,还有关于字符串、数值、日期等数据类型的函数介绍,以及SELECT语句的不同使用方法,如合并查询、SELECT INTO、删除、修改、用户管理、添加数据、设置保存点和事务处理等。 这本书籍将为读者提供一个全面、...

    PL/SQL Developer 远程连接Oracle数据库

    2. **连接字符串(Connection String)**:在TNS文件中,每个数据库都有一个唯一的名称,称为服务名(Service Name)。在PL/SQL Developer中,你需要输入这个服务名以及相应的连接参数,如主机名、端口号和数据库...

    PL/SQL中文帮助手册

    2. **变量和数据类型**:PL/SQL支持多种数据类型,如数值型(NUMBER)、字符串型(VARCHAR2、CHAR)、日期型(DATE)以及布尔型(BOOLEAN)。变量的声明和初始化是编写PL/SQL程序的基础。 3. **流程控制**:PL/SQL...

    PL/SQL编程基础知识

    需要注意的是,在PL/SQL中只能使用SQL的DML(Data Manipulation Language)部分,而不能直接使用DDL(Data Definition Language)部分,如创建表(CREATE TABLE)等操作。如果需要在PL/SQL中执行DDL操作,则需要通过...

    PL/SQL入门到精通书的源代码

    8. **动态SQL**:有时你需要在运行时构建SQL语句,这可以通过EXECUTE IMMEDIATE语句实现,它允许你动态执行字符串形式的SQL。 9. **包(Package)**:包是一种组织PL/SQL对象(如过程、函数、变量)的方式,可以...

    PL/SQL 字符串分割

    字符串分割,..........................................

    Oracle PL/SQL学习官方教材

    例如,PL/SQL中的块由BEGIN、END语句界定,变量和常量用于存储数据,数据类型包括数字、字符串、日期等。 2. **流程控制**:PL/SQL提供了多种流程控制结构,如条件语句(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR、...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    使用工具和技巧来优化PL/SQL性能,例如PL/Scope和PL/SQL中的层次化profiler。 ? 探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、...

    oracle pl/sql fundamentals

    11. **实用程序和内置函数**:熟悉Oracle提供的各种内置函数,如数学函数、字符串函数、日期时间函数等,以及如何利用它们增强PL/SQL代码的功能。 12. **数据库对象的DDL操作**:学习如何在PL/SQL中创建、修改和...

    PL/SQL学习笔记

    关联数组是一种允许以任意字符串作为索引的数组,常用于将PL/SQL表与程序中的数组结构相对应。关联数组的操作包括遍历、添加元素、修改元素和删除元素等。 异常处理是PL/SQL的一个重要特性。PL/SQL定义了多种类型的...

    PL/SQL学习课件

    第二章“访问Oracle”将探讨如何通过PL/SQL连接到Oracle数据库,使用连接字符串、用户认证和游标来操作数据。这部分内容对于理解如何在PL/SQL环境中执行数据库查询至关重要。 第三章“控制结构”深入讲解了PL/SQL中...

    Oracle PL/SQL编程及最佳实践

    在 PL/SQL 中,可以使用各种表达式来操作变量,例如赋值、比较、逻辑等。表达式可以是简单的,也可以是复杂的,例如使用函数、过程等。 六、变量定义规范 在 PL/SQL 中,变量的定义需要遵守一定的规范。变量的名称...

    全面对比T-SQL与PL/SQL

    TRIM 函数在 T-SQL 中用于删除字符串两端的空格,在 PL/SQL 中使用 RTRIM 和 LTRIM 函数来删除字符串两端的空格。 SUBSTRING 函数在 T-SQL 中用于提取字符串的一部分,在 PL/SQL 中使用 SUBSTR 函数。 INSTR 函数...

    pl/sql使用软件

    2. **数据类型**:PL/SQL有多种内置数据类型,如NUMBER(数字)、VARCHAR2(可变长度字符串)、DATE(日期时间)、BOOLEAN(布尔值)等。此外,还可以定义对象类型和复合类型。 3. **流程控制**:包括条件语句(IF-...

    pl/sql客户端

    PL/SQL客户端是一种用于与Oracle数据库进行交互的工具,它主要面向开发人员和数据库管理员,提供了编写、测试和执行PL/SQL(Oracle的结构化查询语言扩展)代码的环境。标题提到的“pl/sql客户端”可能指的是Oracle的...

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    PL/SQL 核心基础代码

    2. **数据类型**:PL/SQL有丰富的内置数据类型,包括数值类型(如NUMBER、INTEGER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)等。 3. **控制流程语句**:包括条件判断(IF-...

    PL/SQL Developer快速输入插件

    标签中的"PL/SQL Developer 插件"进一步强调了这是针对PL/SQL Developer软件的扩展功能,而不是其他开发工具。PL/SQL Developer的插件系统允许用户根据自身需求安装和配置不同的插件,以增强其核心功能。 在压缩包...

    plsql分割字符串

    PL/SQL(Procedural Language for Oracle)作为Oracle数据库的一种强大工具,提供了丰富的功能来处理字符串,包括分割、连接、替换等操作。本文将深入探讨如何在PL/SQL中实现字符串的分割,并通过具体代码示例进行...

Global site tag (gtag.js) - Google Analytics