WEB开发网
开发学院数据库Oracle 使用ADO.NET访问Oracle 9i存储过程(下) 阅读

使用ADO.NET访问Oracle 9i存储过程(下)

 2007-05-13 12:30:03 来源:WEB开发网   
核心提示: 您只能使用 RETURN 参数检索 Oracle 函数的返回值(如上一节所述),而不能使用 ExecuteScalar 方法之一进行检索,使用ADO.NET访问Oracle 9i存储过程(下)(2),序列Oracle 使用序列 来生成唯一编号,而不是使用 SQL Server 所用的数据类

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

序列

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

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

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

CREATE SEQUENCE LOCATIONS_SEQ
  INCREMENT BY 100
  START WITH 1
  MAXVALUE 9900
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER

大多数序列代码是不言自明的。NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。

下面的代码显示了一个存储过程,该过程请求一个序列值,在向 LOCATIONS 表中插入记录时使用它设置主键值,然后在 OUT 参数中返回该主键值。

CREATE OR new PROCEDURE ADD_LOCATION (
  p_location_id OUT NUMBER,
  p_street_address IN VARCHAR2,
  p_postal_code IN VARCHAR2,
  p_city IN VARCHAR2,
  p_state_province IN VARCHAR2,
  p_country_id IN CHAR
)
AS
BEGIN
  INSERT INTO LOCATIONS (
    LOCATION_ID,
    STREET_ADDRESS,
    POSTAL_CODE,
    CITY,
    STATE_PROVINCE,
    COUNTRY_ID)
  VALUES (
    LOCATIONS_SEQ.NEXTVAL,
    p_street_address,
    p_postal_code,
    p_city,
    p_state_province,
    p_country_id
  );
 
  SELECT LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
END ADD_LOCATION;

下面的代码调用该存储过程,以插入一个记录并检索返回的序列值。

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 ADO NET

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接