三、调用
1、PL/SQL
declare
pagesize number :=3;
page number :=2;
indexx number:=0;
result Grades.Result;
grad Grade%rowtype;
begin
loop
fetch result into grad;
dbms_output.putLine(Grad.GradeName);
indexx:=indexx+1;
exit when indexx
end;
注意:
不能有游标的%notfount属性做判断,因为引用游标类型不支持。
没法用for 游标,也不支持.
2、ADP.net(C#)
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
OracleConnection conn=new OracleConnection("连接字符串");
OracleCommand cmd=new OracleCommand("FenYe_Grade",conn);
OracleParameter re=new OracleParameter(":Result",OracleDbType.RefCursor);
re.Direction=ParameterDirection.Output;
cmd.Parameters.Add(new OracleParameter(":p_PageSize",3));
cmd.Parameters.Add(new OracleParameter(":p_Page",2));
cmd.Parameters.Add(re);
conn.Open();
cmd.ExecuteNonQuery();
OracleDataReader read=(re.Value as OracleRefCursor).GetDataReader();
//读数据
//......
read.Close();
conn.Close();
Oracle中的游标类型由ODP.net中的OracleRefCursor类和OracleDataAdapter类解析,用OracleRefCursor的GetDataReader()可以获得OracleDataReader。用OracleDataAdapter解析,在调用Fill()方法时,该类会将输出的游标对应为一张 张DataTable.当只有一个输出游标时,如上面的代码实例,可以直接用OracleCommand的ExcuteReader()获得OracleDataReader。函数返回游标与存储过程返回接收一样。
讲到这里,再讲讲ADP.net里的多行插入吧,这和插入到sql server中有点不同。
2.1、多行插入.
利用ADO.net向sql server插入多行数据,有两种方法:1.拼一个insert into字符串集执行.2、利用DataSet做Fill或批处理.而在ADP.net,也有两种便捷的方法:1.拼insert into集,但要注意,不能纯是"inert into ...;insert into",必须要用 begin end包起来才能成功提交。2、便捷高效的批处理:
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
int[] GradeIds={1,2,3};
string[] GradeNames={"C","C++","C#"};
OracleConnection conn=new OracleConnection("连接字符串");
OracleCommand cmd=new OracleCommand("insert into Grade values(:GradeId,:GradeName)",conn);
OracleParameter re=new OracleParameter(":GradeId",OracleDbType.Int32);
re.Value=GradeIds;
OracleParameter name=new OracleParameter(":GradeName",OracleDbType.Varchar2);
name.Value=GradeNames;
cmd.Parameters.Add(re);
cmd.Parameters.Add(name);
cmd.ArrayBindCount=GradeIds.Length;//批处理量
conn.Open();
int count=cmd.ExecuteNonQuery();
conn.Close();