欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ORACLE Subtype

程序员文章站 2024-01-10 08:54:22
...

定义子类型 我们可以在任何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