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中函数/过程返回结果集的几种方式的更多相关文章
- Oracle中函数/过程返回多个值(结果集)
Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. (1) 返回游标: return的类型为:SYS_REFCUR ...
- Oracle中函数如何返回结果集
在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
- oracle中函数和存储过程的区别和联系
oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- C++中函数的返回值
原文 [ 函数的返回值用于初始化在调用函数处创建的临时对象.在求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是 临时对象.temporary object ] -- ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
随机推荐
- Asp.Net缓存(1)
知其根本,方能应用.MSDN上的缓存讲解.先看原来讲解. Asp.Net缓存概述 通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能. 在这些情况下 ...
- linux设置和查看环境变量的方法
1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" ...
- window.open(url, "_black" , spec)
var url = "${request.contextPath}/test/openWindow.action?number="+number; var spec = " ...
- 心情记录&考试总结 3.30
并不知道现在要干什么,本人像是一只大颓狗 Em..怎么说呢,今天考完了一场奇怪的试 准确的说,画风很不正常的试 第一题集体爆零 第二题暴力20分 第三题暴力40分,乱搞有加成 改题的话, 第一题有奇怪 ...
- lintcode :Trailing Zeros 尾部的零
题目: 尾部的零 设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 挑战 O(logN)的时间复杂度 解题: 常用方法: 也许你在编程之美中看到,通过求能 ...
- SaaS系列介绍之十四: SaaS软件开发分析
1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力 ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...
- C语言指针的概念
在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...
- photoshop:调整图层之色相/饱和度
色相/饱和度:快速调色及调整图片色彩浓淡明暗 面板主要参数:色相.饱和度.明度 色相用来改变颜色:顺序按红-黄-绿-青-蓝-洋红 饱和度用来控制色彩浓淡 明度控制色彩明暗 勾选“着色”,图片会变成单色 ...
- tomcat version
Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules 转自:http://jingwang0 ...
- 31. Next Permutation
题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...