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

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('',''));

Oracle中函数/过程返回结果集的几种方式的更多相关文章

  1. Oracle中函数/过程返回多个值(结果集)

    Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. (1) 返回游标: return的类型为:SYS_REFCUR ...

  2. Oracle中函数如何返回结果集

    在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...

  3. oracle中函数和存储过程的区别和联系【转载竹沥半夏】

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

  4. oracle中函数和存储过程的区别和联系

    oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...

  5. Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数

    首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...

  6. C++中函数的返回值

    原文 [ 函数的返回值用于初始化在调用函数处创建的临时对象.在求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是 临时对象.temporary object ] -- ...

  7. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  8. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  9. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

随机推荐

  1. Intent (一)

    1,简介 Intent 是一种消息传递机制,可以理解为一种对消息的封装,执行某操作的抽象描述,可用于应用程序内部及应用程序之间 其组成包括: 要执行的动作(action) 如VIEW_ACTION(查 ...

  2. C# 在vs2010中打开vs2012的项目(转)

    在vs2010中打开vs2012的项目 今天在自己的电脑上装了vs2010然后要打开之前在vs2012上创建的sln文件 被提示-- 无法打开在新版本上创建的sln--解决方案--文件 其实vs201 ...

  3. ZOJ 1642 Match for Bonus (DP)

    题目链接 题意 : 给你两个字符串,两个字符串都有共同的字母,给你每个字母的值,规则是,找出两个字符串中的共同的一个字母,然后这个字母的值就可以加到自己的分数上,但是这步操作之后,这两个字母及其之前的 ...

  4. 读书笔记:7个示例科普CPU Cache

    本文转自陈皓老师的个人博客酷壳:http://coolshell.cn/articles/10249.html 7个示例科普CPU Cache (感谢网友 @我的上铺叫路遥 翻译投稿) CPU cac ...

  5. URL中的特殊字符处理笔记

      URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII ...

  6. java:访问权限

    访问权限四大类:权限从大->小 1.public:   公共权限 2.protected:  受保护权限 3.default: 包级别访问权限/默认权限 4.private:   私有权限 以p ...

  7. C#四种文件流的区别(转)

    1.FileStream类的读写操作 FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率. 代码实例: //创建文件 ...

  8. MVC5中Model层开发数据注解

    ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...

  9. 使用Retrofit时出现 java.lang.IllegalArgumentException: URL query string "t={type}&p={page}&size={count}" must not have replace block. For dynamic query parameters use @Query.异常原因

    /** * Created by leo on 16/4/30. */ public interface GanchaiService { @GET("digest?t={type}& ...

  10. nand flash 扇区的管理以及初始化

    (1)首先需要了解NAND FLASH的结构.如图: 以镁光MT29F4G08BxB Nand Flash为例,这款Flash(如上图)以4个扇区(sector)组成1个页(page),64个页(pa ...