Batch multiple select statements when calling Oracle from ADO.NET(从 ADO.NET 调用 Oracle 时批处理多个选择语句)
问题描述
我想批量处理多个 select 语句以减少到数据库的往返次数.该代码类似于下面的伪代码.它在 SQL Server 上完美运行,但在 Oracle 上不起作用——Oracle 抱怨 sql 语法.我环顾四周,我能找到的从 Oracle 返回多个结果集的唯一示例是使用存储过程.是否可以在不使用存储过程的情况下在 Oracle 中执行此操作?我正在使用 MS Oracle 数据提供程序,但如果需要,可以使用 ODP.Net.
I want to batch multiple select statements to reduce round trips to the database. The code looks something like the pseudo code below. It works perfectly on SQL Server, but does not work on Oracle - Oracle complains about the sql syntax. I have had a look around and the only examples I can find of returning multiple result sets from Oracle are using Stored Procedures. Is it possible to do this in Oracle without using Stored Procedures? I am using the MS Oracle data provider, but could use the ODP.Net one if needed.
var sql = @"
select * from table1
select * from table2
select * from table3";
DbCommand cmd = GetCommand(sql);
using(var reader = cmd.ExecuteReader())
{
dt1.Load(reader);
reader.NextResult();
dt2.Load(reader);
reader.NextResult();
dt3.Load(reader);
}
推荐答案
您应该编写一个返回 3 个引用游标的匿名 pl/sql 块.
You should write an anonymous pl/sql block that returns 3 ref cursors.
edit1: 这里是在一个带有一个游标的匿名 pl/sql 块中完成的.它也应该与三个一起工作.Oracle 引用游标不锁定数据,它们是从 pl/sql 过程或匿名 pl/sql 块返回结果集的最快方式.
edit1: Here it is done in an anonymous pl/sql block with one cursor. It should work with three too. Oracle ref cursors don't lock data and they are the fastest way to return a result set from a pl/sql procedure or an anonymous pl/sql bloc.
http://www.oracle.com/technetwork/issue-archive/2006/06-jan/o16odpnet-087852.html
这篇关于从 ADO.NET 调用 Oracle 时批处理多个选择语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 ADO.NET 调用 Oracle 时批处理多个选择语句
基础教程推荐
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- c# Math.Sqrt 实现 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01