Executing Multiple Select Statements for Oracle

使用SQL Server的时候,我们可以传多个Select语句作为CommandText,一次执行,然后通过DataReader的NextResult方法访问多个Select语句返回的结果集,当然也可以用DataAdapter来填充DataSet。

下面的例子就是用一个DBCommand执行多个Select语句的代码片段。

myCommand.CommandText = 
	"UPDATE Books SET Price=Price*0.95 “ +
	“SELECT BookName, Price FROM Books " + 
	"UPDATE Toys SET Price=Price*0.9 “ +
	“SELECT ToyName, Price FROM Toys ";

SqlDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read()) // process the first result set
{
	Console.WriteLine(dreader.GetString(0) + ": "
		+ dreader.GetSqlMoney(1).ToDouble());
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read()) // process the second result set
{
   Console.WriteLine(dreader.GetString(0) + ": " 
     + dreader.GetSqlMoney(1).ToDouble() + "\n");
}

dreader.Close();

 

而当使用Oracle数据库的时候,这样的写法却会报错:ORA-00911: invalid character

这是因为Oracle不支持Multiple Statements的缘故。

如果你真的要这样写多个select语句而不想用存储过程的话,你可以通过anonymous block和ref cursors的方式来实现,同样,通过DataReader的NextResult方法访问多个Select语句返回的结果集。

string strSql = "begin open :refcur1 for select * from emp;" + 
"open :refcur2 for select * from dept;" + 
"open :refcur3 for select * from salgrade;end;";
myCommand.CommandText = strSql;
myCommand.Parameters.Add("refcur1", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur2", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur3", OracleType.Cursor).Direction = ParameterDirection.Output;

OracleDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read())
{
    //process the first result set
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read())
{
   //process the second result set
}

dreader.NextResult();

while (dreader.Read())
{
   //process the third result set
}

dreader.Close();

 

 

原创文章,转载请注明: 转载自闲云博客

本文链接地址: Executing Multiple Select Statements for Oracle

发表评论

电子邮件地址不会被公开。 必填项已用*标注