`

Oracle中函数/过程返回结果集的几种方式

阅读更多
转载地址:http://blog.csdn.net/feiliu010/archive/2007/03/23/1538822.aspx

Oracle中函数/过程返回结果集的几种方式:
    以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.
    (1) 返回游标:
        return的类型为:SYS_REFCURSOR
        之后在IS里面定义变量:curr SYS_REFCURSOR;
        最后在函数体中写:
         open cur for
            select ......;
         return cur;
        例:
      
CREATE OR REPLACE FUNCTION A_Test(
                orType varchar2
        )RETURN SYS_REFCURSOR
        is
               type_cur SYS_REFCURSOR;
        BEGIN
            OPEN type_cur FOR
                    select col1,col2,col3 from testTable ;
                  RETURN  type_cur;
        END;

    (2)返回table类型的结果集:
        首先定义一个行类型:
          
CREATE OR REPLACE TYPE "SPLIT_ARR"  AS OBJECT(nowStr varchar2(18))

        其次以此行类型定义一个表类型:
        
  CREATE OR REPLACE TYPE "SPLIT_TAB" AS TABLE of split_arr;

        定义函数(此函数完成字符串拆分功能):
          
CREATE OR REPLACE FUNCTION GetSubStr(
                   str in varchar2, --待分割的字符串
                   splitchar in varchar2 --分割标志
            )
            return split_tab
            IS
              restStr varchar2(2000) default GetSubStr.str;--剩余的字符串
              thisStr varchar2(18);--取得的当前字符串
              indexStr int;--临时存放分隔符在字符串中的位置
            
              v split_tab := split_tab(); --返回结果

            begin
                 dbms_output.put_line(restStr);
                 while length(restStr) != 0
                   LOOP
                     <<top>>
                     indexStr := instr(restStr,splitchar); --从子串中取分隔符的第一个位置

                     if indexStr = 0 and length(restStr) != 0  then--在剩余的串中找不到分隔符
                        begin
                          v.extend;
                          v(v.count) := split_arr(Reststr);
                          return v;
                        end;
                     end if;
                   
                     if indexStr = 1 then---第一个字符便为分隔符,此时去掉分隔符
                        begin
                             restStr := substr(restStr,2);
                             goto   top;
                        end;
                     end if;
                   
                     if length(restStr) = 0 or restStr is null then
                        return v;
                     end if;
                  
                     v.extend;
                     thisStr := substr(restStr,1,indexStr - 1); --取得当前的字符串
                     restStr := substr(restStr,indexStr + 1);---取剩余的字符串

                     v(v.count) := split_arr(thisStr);
                   END LOOP;
                 return v;
            end;

        在PL/SQL developer中可以直接调用
         
cursor strcur is
                         select nowStr from Table(GetSubStr('111,222,333,,,',','));

    (3)以管道形式输出:
      
create type row_type as object(a varchar2(10), v varchar2(10));--定义行对象
        create type table_type as table of row_type; --定义表对象
        create or replace function test_fun(
            a in varchar2,b in varchar2
        )
        return table_type pipelined
        is
            v row_type;--定义v为行对象类型
        begin
          for thisrow in (select a, b from mytable where col1=a and col2 = b) loop
            v := row_type(thisrow.a, thisrow.b);
            pipe row (v);
          end loop;
          return;
        end;
        select * from table(test_fun('123','456'));
分享到:
评论

相关推荐

    oracle管道函数用法

    Oracle管道函数是一种特殊类型的函数,它能够返回一个数据集合,并且能够在函数执行的过程中逐步返回结果,而不仅仅是最后的结果。这种特性使得管道函数非常适合于处理大量数据或者需要逐步展示处理进度的场景。 ##...

    oracle 的函数、存储过程、游标、简单实例

    本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...

    oracle分析函数文档

    开窗函数定义了分析函数作用的数据范围,通常包括以下几种类型: 1. **ORDER BY**:根据指定列的值对数据进行排序。 2. **PARTITION BY**:将数据划分成不同的分区,每个分区独立进行计算。 3. **RANGE BETWEEN** ...

    ORACLE技巧 - 不同记录集的横向合并

    在Oracle数据库中,对于两个记录集的比较,通常会涉及到以下几种方法: 1. **编程存储过程返回游标**:这种方式允许开发者在存储过程中对两批数据进行逐一比对,并将结果返回给调用者。这种方式灵活性高,但开发...

    oracle函数触发器游标等几个小例子

    在`oracle函数.txt`中,你可能会找到关于如何声明、定义和调用函数的详细说明。 2. **Oracle游标**:游标允许我们处理查询结果集中的每一行数据。在`oracle游标.txt`中,你可以学习到如何声明、打开、读取和关闭...

    oracle分析函数及开窗函数

    Oracle自8.1.6版本开始引入了分析函数,这类函数主要用于计算基于组的聚合值,并且与传统的聚合函数不同的是,分析函数可以针对每个组返回多行结果,而不仅仅是单一的聚合值。这种特性使得分析函数在数据处理和报表...

    oracle 分析函数学习笔记

    在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...

    oracle常用函数chm版

    3. **日期型函数**:处理日期和时间数据时,Oracle提供了一系列的日期函数,如`SYSDATE`返回当前系统日期,`ADD_MONTHS`用于添加月份,`EXTRACT`可以提取日期中的年、月、日等部分,`TO_DATE`和`TO_CHAR`则用于日期...

    ORACLE_分析函数大全

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它们在数据处理和分析中扮演着重要角色。分析函数允许用户在结果集的每一行上执行计算,不仅考虑当前行,还考虑了同一组内的其他行。这与传统的聚合函数...

    oracle分析函数参考手册

    Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且能够返回多个结果行。这与传统的聚合函数(如`SUM`、`COUNT`等)形成鲜明对比,后者通常只针对每一组返回单一的结果行。自Oracle 8.1.6...

    oracle日常函数文档

    根据提供的文档内容,本文将详细解析Oracle中几个常用的字符串处理函数及其应用场景,这些函数包括CONCAT、INITCAP、INSTR、LENGTH、LOWER、UPPER以及LPAD等。 ### 1. CONCAT - 字符串连接 #### 函数简介 `CONCAT`...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性。以下是对标题和描述中所涉及知识点的详细解释: 1. **concat() 函数**: Oracle中的`concat()`函数是最基本的字符串连接方法...

    简单的几个oracle函数

    根据提供的文件信息,我们可以归纳出以下几个Oracle数据库中的关键函数及其用法: ### 1. MONTHS_BETWEEN函数 **函数定义与用途:** `MONTHS_BETWEEN(date1, date2)` 函数用于计算两个日期之间的月份数。这个函数...

    oracle 内置函数

    在Oracle中,内置函数大致可以分为数学函数、字符串函数、日期时间函数、转换函数、系统信息函数和条件判断函数等几大类。 1. **数学函数**: - ABS:返回一个数的绝对值。 - CEIL:向上取整,返回大于或等于指定...

    oracle时间函数

    以上三种方法都是通过Oracle的时间函数来计算特定的时间跨度内的天数。这些函数不仅可以帮助我们快速获取所需的数据,还可以简化复杂的时间计算逻辑。通过这些基本的函数组合,我们可以解决许多实际业务场景中的日期...

    oracle最全函数大全

    这些函数可以大致分为以下几类:分析函数、聚合函数、转换函数、日期型函数、字符型函数、数值型函数以及其他函数。本文将详细介绍每种类型的函数,并提供具体的使用场景和示例。 #### 二、分析函数 分析函数主要...

    【Oracle】LISTAGG函数的使用.pdf

    * 还有一部分分析函数不会对同一组中的数据进行处理(例如:sum()、listagg()),这种情况下,分析函数返回的数据会有重复的,distinct 处理之后的结果与对应的聚合函数返回的结果一致。 在使用 LISTAGG 函数时,...

    Oracle函数大全实例

    本文将深入探讨Oracle中的几种主要函数类型:单行函数、多行函数以及分组函数,并给出相应的实例来帮助理解。 1. **单行函数** 单行函数在处理每一行数据时返回一个结果。它们分为字符函数、数字函数、日期函数和...

    oracle 数据库的 函数 和包

    下面通过几个例子来详细了解Oracle函数的创建与使用: #### 1. 创建不带参数的简单函数 ```sql CREATE OR REPLACE FUNCTION fun_test RETURN INTEGER IS BEGIN RETURN 1000; END; ``` 此函数名为`fun_test`,...

    ORACLE过程和函数

    总的来说,Oracle的过程和函数提供了一种强大而灵活的方式来组织和执行数据库操作,提高了数据库系统的整体效率和安全性。通过熟练掌握这些概念,开发者能够构建出更高效、更可靠的数据库应用。

Global site tag (gtag.js) - Google Analytics