日期:2013-01-25  浏览次数:20466 次

  对于 HR 架构的默认安装,控制台输出显示了员工 101 的两个记录中每个记录的字段(用分号分隔):

  101;9/21/1989 12:00:00 AM;10/27/1993 12:00:00 AM;AC_ACCOUNT;110;

  101;10/28/1993 12:00:00 AM;3/15/1997 12:00:00 AM;AC_MGR;110;

  上述代码显示,包中的过程是使用包名称 (ELECT_JOB_HISTORY) 和过程的名称(在此情况下为 GetJobHistoryByEmployeeId)指定的,二者之间用句点分隔。

  代码还说明了如何定义结果集的 REF CURSOR 参数。请留意,数据类型为 OracleType.Cursor,方向为 ParameterDirection.Output。

  还请留意,在访问 REF CURSOR 中的结果集的整个过程中,连接都保持打开形状。

  如果包前往多个游标,则 DataReader 会按照您向参数集合中添加它们的顺序来访问这些游标,而不是按照它们在过程中出现的顺序来访问。可使用 DataReader 的 NextResult() 方法前进到下一个游标。

  前往单个值的存储过程

  OracleCommand 类的 ExecuteOracleScalar() 方法用于执即将单个值作为 OracleType 数据类型前往的 SQL 语句或存储过程。如果命令前往一个结果集,则该方法会前往第一行第一列的值。如果前往了 REF CURSOR,而不是前往了 REF CURSOR 所指向的第一行第一列的值,则该方法会前往一个空援用。OracleCommand 类的 ExecuteScalar() 方法类似于 ExecuteOracleScalar() 方法,只不过它将值作为 .NET 框架数据类型前往。

  虽然如此,在使用 Oracle 存储过程时,这两个方法都没有用。Oracle 存储过程不能将值作为 RETURN 语句的一部分前往,而只能将其作为 OUT 参数前往。有关信息,请参阅不前往数据的存储过程一节。同时,除了通过 REF CURSOR 输出参数以外,您不能前往结果集。下一节将对此进行讨论。