`
123003473
  • 浏览: 1064984 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

oracle数据库split()方法的实现与测试

阅读更多
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);  
  
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)  
  RETURN ty_str_split  
IS  
  j INT := 0;  
  i INT := 1;  
  len INT := 0;  
  len1 INT := 0;  
  str VARCHAR2 (4000);  
  str_split ty_str_split := ty_str_split ();  
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 fn_split;  
/  
  
测试:  
  
DECLARE  
  CURSOR c  
  IS  
    SELECT *  
      FROM TABLE (CAST (fn_split ('1;;12;;123;;1234;;12345', ';;') AS ty_str_split  
                  )  
              );  
  
  r c%ROWTYPE;  
BEGIN  
  OPEN c;  
  
  LOOP  
    FETCH c INTO r;  
  
    EXIT WHEN c%NOTFOUND;  
    DBMS_OUTPUT.put_line (r.column_value);  
  END LOOP;  
  
  CLOSE c;  
END;  
/   
  
结果:  
1  
12  
123  
1234  
12345  


下面语句均不行 :
fn_split('4,5,6,78',',') 返回的是 collection

select fn_split('4,5,6,78',',')[0] from dual
select fn_split('4,5,6,78',',').first from dual


SELECT * FROM TABLE (CAST (fn_split('4,5,6,78',',') AS ty_str_split)) where rownum < 2;
分享到:
评论

相关推荐

    oracle_split_函数_返回数组

    在Oracle数据库中,由于内置函数不直接支持像Java中的`split`那样拆分字符串并返回数组,因此开发者需要自定义函数来实现这一功能。这里提到的两种方法都是为了解决这个问题,即根据指定的分隔符将字符串拆分为一个...

    oracle split函数

    通过上述两种方法,我们可以有效地在Oracle数据库中实现字符串的分割操作。这些方法不仅可以帮助我们在查询时更灵活地处理数据,还可以提高查询效率。需要注意的是,当字符串非常长或者分隔符比较复杂时,可能会影响...

    (完整word版)ORACLE数据库期末考试题目及答案.docx

    根据提供的文档信息,这里主要涉及的是Oracle数据库的相关知识点,包括了数据库管理系统的各种概念、操作以及编程技术。下面将对这些知识点进行详细的解释与扩展。 ### 重要知识点解析 #### 1. SGA (System Global...

    Oracle 自定义split 函数实例详解

    在Oracle数据库中,系统并未内置一个直接用于字符串分割的`SPLIT`函数,但我们可以根据需求自定义一个。本文将详细介绍如何在Oracle中创建一个自定义的`SPLIT`函数,以及如何使用这个函数进行字符串处理。 首先,...

    oracle RAC 测试案例.doc

    Oracle RAC,全称为Real Application Clusters,是Oracle数据库的一个重要特性,用于构建高可用性和高性能的数据库集群。本文档详细介绍了对Oracle 10g RAC实施的高可用性功能测试,通过模拟各种故障场景来验证RAC的...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    1或者oracle, oracle数据库,不区分大小写,默认1,需java1.5及以上版本 2或者sqlserver, mssqlserver数据库,不区分大小写,需java1.6及以上版本 3或者mysql, mysql数据库,不区分大小写,需java1.5及以上版本 4或者...

    OraSpeedTest.rar

    尽管这个程序可能无法直接应用于现代的Oracle数据库环境,但它的源代码仍可以作为理解过去数据库性能测试策略和C++与Oracle集成的宝贵资源。对于学习和研究历史的开发实践,或者对老版本Oracle有需求的人来说,这是...

    oracle自动一年建立表分区.zip

    在Oracle数据库系统中,表分区是一种高级特性,用于提高数据管理效率、提升查询性能和简化维护工作。"Oracle自动一年建立表分区.zip"文件显然包含了用于自动创建按时间(一年)分区的Oracle脚本。这样的脚本对于处理...

    ORACLE OSB开发指南

    此部分详细介绍了在Oracle Service Bus中执行各种任务的方法,包括但不限于: - **项目与资源管理**:创建、编辑、克隆项目和文件夹,定义资源命名规则。 - **资源配置项目**:创建配置项目以管理项目的部署配置。 ...

    oracle rac

    《大话Oracle RAC》一书由张晓明所著,深入浅出地介绍了Oracle Real Application Clusters(RAC)的各个方面,对于数据库开发者、初学者以及相关从业人员来说,是一本不可多得的参考手册。以下是对该书中部分关键...

    基于Oracle RAC 双活方案实施,如何规避脑裂风险- 最佳实践.docx

    7. **故障模拟与测试**: 定期进行故障模拟测试可以帮助识别潜在的问题,并验证现有策略的有效性。这包括模拟网络中断、硬件故障等场景,确保系统能够在各种情况下稳定运行。 8. **文档记录与培训**: 建立详尽的文档...

    Delphi文本和数据库表格记录的转换..rar

    10. **测试与验证**:完成转换后,应进行充分的测试,确保数据的完整性和一致性。可以编写单元测试或集成测试来验证转换过程的正确性。 以上就是关于"Delphi文本和数据库表格记录的转换"这一主题的关键知识点,涵盖...

    Ibatis.net结合oracle批量删除实现代码

    本文将详细介绍如何在使用***框架的基础上,结合Oracle数据库实现批量删除的操作,并提供相应的示例代码进行参考。 首先,我们需要了解***框架的基本工作原理。*** 是一个对象关系映射(ORM)框架,它允许开发者...

    php网络开发完全手册

    13.7 数据库设计的方法与步骤 210 13.7.1 需求分析 211 13.7.2 概念设计的E-R方法 214 13.7.3 数据库的逻辑设计方法 215 13.7.4 物理设计阶段 218 13.7.5 数据库的实施阶段 218 13.7.6 数据库的运行和维护阶段 218 ...

    详解oracle管道函数的用法(一行拆为多行)

    在Oracle数据库中,管道函数通过将数据流式传输到结果集中来实现这一点,而不是一次性返回所有的结果。这在处理大量数据时能提高性能,因为它允许数据库在计算过程中逐步传递结果,而不需要等到整个计算完成。 **1....

    DS-00410-SF_ORAC_CN.pdf

    7. **Split Brain**:Split Brain是指在分布式系统中,由于网络问题导致的部分节点失去与其他节点的联系,各自认为自己是唯一有效的部分,可能会造成数据不一致。I/O Fencing是解决此问题的关键措施。 8. **...

    winrunner资料

    3. **参数化测试**:通过将测试数据与脚本分离,实现更灵活的测试方案。这样可以在不同的输入条件下重复执行相同的测试步骤。 4. **测试结果分析**:除了基本的通过/失败判断外,WinRunner还提供了丰富的测试结果...

    如何安装虚拟机以及相关故障的处理

    在IT领域,虚拟化技术是不可或缺的一部分,它...总的来说,安装虚拟机和Oracle数据库是一个涉及多个环节的过程,每个环节都需要仔细规划和执行。遇到问题时,保持耐心,充分利用网络资源,你一定能找到解决问题的方法。

    java常用词语例子以及解释

    例如,连接到Oracle数据库时: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` 接下来,通过提供JDBC URL、用户名和密码来创建数据库连接: ```java Connection conn = DriverManager.get...

Global site tag (gtag.js) - Google Analytics