Chinaunix首页 | 论坛 | 博客
  • 博客访问: 743861
  • 博文数量: 769
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:37
文章分类

全部博文(769)

文章存档

2011年(1)

2008年(768)

我的朋友

分类:

2008-10-15 16:37:44

  对于 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 参数。请注意,数据类型为 Type.Cursor,方向为 ParameterDirection.Output。

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

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

  返回单个值的过程

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

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

  您只能使用 RETURN 参数检索 Oracle 函数的返回值(如上一节所述),而不能使用 ExecuteScalar 方法之一进行检索。

  序列

  Oracle 使用序列 来生成唯一编号,而不是使用 SQL Server 所用的数据类型 uniqueidentifier。无论是哪种情况,主要用途都是为主键列生成一系列唯一编号。与 uniqueidentifier 数据类型不同,序列是与将其用于主键值的一个或多个表无关的数据库对象。

  Oracle 序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle 将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

  可以使用 CREATE SEQUENCE 命令创建 Oracle 序列。该命令所带参数包括增量、起始值、最大值、循环和缓存。可使用 NEXTVAL 和 CURRVAL 关键字访问序列值。NEXTVAL 返回序列中的下一个编号,而 CURRVAL 提供对当前值的访问。HR 架构中的序列 LOCATIONS_SEQ 按如下方式定义:

 

[1]     

【责编:Luzi】

--------------------next---------------------

阅读(381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~