Heim  >  Artikel  >  Datenbank  >  ORACLE Subtype

ORACLE Subtype

WBOY
WBOYOriginal
2016-06-07 15:31:491359Durchsuche

定义子类型 我们可以在任何PL/SQL块、子程序或包中定义自己的子类型,语法如下: SUBTYPE subtype_name IS base_type[(constraint)] [NOT NULL ]; subtype_name就是声明的子类型的名称,base_type可以是任何标量类型或用户定义类型,约束只是用于限定基类型

定义子类型

我们可以在任何PL/SQL块、子程序或包中定义自己的子类型,语法如下:

SUBTYPE  subtype_name IS  base_type[(constraint)] [NOT  NULL ]; 

subtype_name就是声明的子类型的名称,base_type可以是任何标量类型或用户定义类型,约束只是用于限定基类型的精度和数值范围,或是最大长度。下面举几个例子:

DECLARE 
  SUBTYPE  birthdate IS  DATE  NOT  NULL ;   -- based on DATE type

  SUBTYPE  counter IS  NATURAL ;   -- based on NATURAL subtype

  TYPE  namelist IS  TABLE  OF  VARCHAR2 (10);

  SUBTYPE  dutyroster IS  namelist;   -- based on TABLE type

  TYPE  timerec IS  RECORD (
    minutes   INTEGER ,
    hours     INTEGER 
  );

  SUBTYPE  finishtime IS  timerec;   -- based on RECORD type

  SUBTYPE  id_num IS  emp.empno%TYPE ;   -- based on column type 

我们可以使用%TYPE或%ROWTYPE来指定基类型。当%TYPE提供数据库字段中的数据类型时,子类型继承字段的大小约束(如果有的话)。但是,子类型并不能继承其他约束,如NOT NULL。

2、使用子类型

一旦我们定义了子类型,我们就可以声明该类型的变量、常量等。下例中,我们声明了Counter类型变量,子类型的名称代表了变量的使用目的:

DECLARE 
  SUBTYPE  counter IS  NATURAL ;

  ROWS   counter; 

下面的例子演示了如何约束用户自定义子类型:

DECLARE 
  SUBTYPE  accumulator IS  NUMBER ;

  total   accumulator(7, 2); 

子类型还可以检查数值是否越界来提高可靠性。下例中我们把子类型Numeral的范围限制在-9到9之间。如果程序把这个范围之外的数值赋给Numeral类型变量,那么PL/SQL就会抛出一个异常。

DECLARE 
  SUBTYPE  numeral IS  NUMBER (1, 0);

  x_axis   numeral;   -- magnitude range is -9 .. 9 
  y_axis   numeral;
BEGIN 
  x_axis    := 10;   -- raises VALUE_ERROR 
  ...
END ; 

 

http://blog.csdn.net/ZengMuAnSha/archive/2010/03/30/5431728.aspx

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn