来自Odp.net中Oracle的多个结果集,没有refcursors

来自Odp.net中Oracle的多个结果集,没有refcursors,第1张

概述SQL Server能够在一次往返中返回多个查询的结果,例如: select a, b, c from y;select d, e, f from z; Oracle不喜欢这种语法.可以使用引用游标,如下所示: begin open :1 for select count(*) from a; open :2 for select count(*) from b; end; 但是, sql Server能够在一次往返中返回多个查询的结果,例如:

select a,b,c from y;select d,e,f from z;

Oracle不喜欢这种语法.可以使用引用游标,如下所示:

begin   open :1 for select count(*) from a;   open :2 for select count(*) from b; end;

但是,您在打开/关闭游标时会受到惩罚,并且您可以长时间保持数据库锁定.我想做的是使用Odp.net一次性检索这两个查询的结果.可能吗?

解决方法 在Oracle中,引用游标是指向数据的指针,而不是数据本身.
因此,如果一个过程返回两个引用游标,则客户端仍然必须从这些游标中获取行(并引发网络命中).

因此,如果数据量很小,您可能希望调用只返回值的过程.
如果数据量很大(数千行),那么它无论如何也不会是单个网络旅行,因此当你在游标之间切换时,额外的一两个不会产生太大的影响.

另一种选择是单个选择返回所有行.这可能是一个简单的UNION ALL

select a,c from y union all select d,f from z;

它可以是流水线表功能

create or replace package test_pkg is    type rec_two_cols is record        (col_a  varchar2(100),col_b       varchar2(100));    type tab_two_cols is table of rec_two_cols;    function ret_two_cols return tab_two_cols pipelined;end;/create or replace package body test_pkg is    function ret_two_cols return tab_two_cols pipelined    is        cursor c_1 is select 'type 1' col_a,object_name col_b from user_objects;        cursor c_2 is select 'type 2' col_a,object_name col_b from user_objects;        r_two_cols  rec_two_cols;    begin        for c_rec in c_1 loop            r_two_cols.col_a := c_rec.col_a;            r_two_cols.col_b := c_rec.col_b;            pipe row (r_two_cols);        end loop;        for c_rec in c_2 loop            r_two_cols.col_a := c_rec.col_a;            r_two_cols.col_b := c_rec.col_b;            pipe row (r_two_cols);        end loop;        return;    end;end;/select * from table(test_pkg.ret_two_cols);

我相信最新版本的ODP for 11g允许用户定义的类型可能有所帮助.

总结

以上是内存溢出为你收集整理的来自Odp.net中Oracle的多个结果集,没有refcursors全部内容,希望文章能够帮你解决来自Odp.net中Oracle的多个结果集,没有refcursors所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存