Oracle中怎么返回多个函数值,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

<>

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

转自 http://blog.csdn.net/feiliu010/article/details/1538822

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

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

Oracle中函数如何返回结果集

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

python中函数的返回值

函数返回值(一) <1>“返回值”介绍 现实生活中的场景: 我给儿子10块钱,让他给我买包烟.这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是 ...

C&plus;&plus;中函数的返回值

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

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

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

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

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

java 一个函数EnumMap返回多个值

java 一个函数如何返回多个值   在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...

Oracle常用函数&colon;DateDiff&lpar;&rpar; 返回两个日期之间的时间间隔自定义函数

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

java 一个函数如何返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过 ...

随机推荐

SVN的switch命令

语法就不说了,文档有的是,主要是两个常用的用法: . 切换资源库(svn sw --relocate) [plain] view plaincopy svn sw --relocate

Brain Network &lpar;easy&rpar;

Brain Network (easy) One particularly well-known fact about zombies is that they move and think terr ...

mybatis 动态sql 插入报错

1. 值为null必须制定jdbcType 单条执行的话,可以考虑把值为null的字段去掉 2. 值的类型无法解析 比如oracle.sql.TIMESTAMP类型,需转为java.sql.TIMES ...

centos7 apache设置伪静态 开启rewrite&lowbar;module

设置伪静态除了要生成.htaccess文件外,还需要查看服务器是否开启了rewrite_module.经过一番的纠结,处理方法如下: 编辑Apache配置文件 nano /etc/httpd/conf ...

VC&plus;&plus;程序运行时间测试函数

0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算 ...

MUI上传文件的方法

...

浅析Symbol

不知道大家有没有留意ES6中的Symbol函数?在此之前,我对Symbol的认识知识这样的:  一.Symbol()和Symbol.for('str') Symbol()是独一无二的,你无法创建两个相 ...

ios模拟器安装测试包方法

1. 使用ios-sim ios-sim是一个可以用命令空着ios模拟器的工具.利用这个命令,我们可以启动模拟器.安装app.启动app.查询ios sdk,它可以使我们像自动化测试一样打开xcode ...

转载:CSS的组成&comma;三种样式&lpar;内联式&comma;嵌入式&comma;外部式&rpar;&comma;优先级

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值