oracle 存储过程,数据处理并返回结果集问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 存储过程,数据处理并返回结果集问题相关的知识,希望对你有一定的参考价值。

我想写个oracle 的存储过程,实现功能如下: 查询表的内容,选出符合条件的子集,同时对这个子集的内容作更新字段, 最后返回操作的结果集。ps : 我昨天使用临时表放缓存结果是可以实现的。 如果加临时表, 又要维护这个临时表,项目限制,不想这么做。以前使用SQL server 实现超简单。 oracle 没怎么接触过,有什么好的思路? 不一定要贴代码, 给个思路就OK!

参考技术A oracle 也有临时表的概念,我不知道你以前用sql server的时候建立的那个临时表是虚拟的,还是实体表出现在库里。oracle 有虚拟临时表的东西,是
with aa as sql1() ,
bb as sql2() 然后后面就可以select * from sql1,sql2 where XXX了。追问

按照你的用法, 我可以 用 OUT 游标参数 open for select * aa , 然后返回结果吗?

追答

用我这个方法就不在用游标了,当然游标来循环也是可以的,方法有很多,看你怎么选择了~

参考技术B oracle 可以 返回游标。

你搜索一下: oracle return cursor

我也没有用过。
参考技术C set serveroutput on
dbms_output
参考技术D 用SQL server实现超简单是怎么实现?追问

在存储过程里面 搞个临时表, 做完处理直接select 临时表内容就可以了啊。 不需要 在外面create一个临时表的。

追答

我还是不太理解你的需求。
感觉直接open cursor返回record就可以了啊。
要不你把sqlserver的代码贴出来看看?

追问

类似:
begin
create table #temp (aa int)
declare @crsrGroup cursor
set @crsrGroup = cursor for select GroupName from wt_group
//操作略

close @crsrGroup
select * from #temp
end

追答

Declare
TYPE EMP_RECORD_TYPE IS RECORD(
AA NUMBER);
EMP_RECORD EMP_RECORD_TYPE;
TYPE EMP_TABLE_TYPE IS TABLE OF EMP_RECORD_TYPE INDEX BY PLS_INTEGER;
EMP_TABLE EMP_TABLE_TYPE;
BEGIN

SELECT GROUPNAME BULK COLLECT INTO EMP_TABLE FROM WT_GROUP;
FOR I IN 1 .. EMP_TABLE.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(EMP_TABLE(I).AA);
END LOOP;;
END;

追问

我要写的过程大致是下面这样, 你那个好像是把结果打印到控制台呀。

追答

你说最后返回操作的结果集,你的例子里也没有返回的例子,,所以你最终要返回什么?

追问

cur_arg 返回游标, 前台不是能取到数据吗?

本回答被提问者采纳

oracle存储过程 中把临时表数据 返回结果集

在pl/sql 中 执行存储过程 返回 如上数据,能不能返回的是 这样的数据啊、怎样整

参考技术A 用索引表快一些,然后使用select * from table(存储过程名(参数列表....))输出。 参考技术B 利用游标cursor,然后用java代码,调用存储过程返回返回结果集(resultset)追问

存储过程中药返回结果集,必须用游标吗?

追答

应该不是吧,可能还可以用索引表吧,

参考技术C 你那个返回到哪?是个表吗?要是表结构一样,直接
insert into 表1 select * from 表2;

以上是关于oracle 存储过程,数据处理并返回结果集问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程:返回结果集和输出参数

oracle存储过程 中把临时表数据 返回结果集

oracle 如何返回多条记录

PHP如何调用SQLServer2012的存储过程并获取返回结果集及出参?

ORACLE 存储过程怎么返回临时表结果集

C#中使用Oracle存储过程返回结果集