定义和声明子类型¶
子类型作为一个数据类型的子集,可以在任意包或者PL/SQL块中进行定义。
子类型的基类型可以是自定义类型,也可以是基本类型。
子类型可以指定not null约束和range约束,变量引用子类型时如果子类型指定了not null约束那么变量必须指定默认值。
语法:
constraint ::=
说明:
sub_type_definition
sub_type_name:即将定义的子类型名称。
base_type_name:子类型依赖的基类型名称。
constraint:对子类型的约束,可缺省。
character_set:指定的字符集
NOT NULL:约束所定义的子类型非空,默认为false
constraint
precision:基类型精度。
scale:基类型范围。
low_value:约束所定义的子类型取值范围的最小值,只有整型可以指定该约束。
high_value:约束所定义的子类型取值范围的最大值,只有整型可以指定该约束。
示例:定义和声明子类型¶
-- 基类型为基本类型(int),无约束
DECLARE
SUBTYPE My_Subtype1 IS int;
a1 My_Subtype1;
BEGIN
a1 :=123;
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
-- 基类型为基本类型(number),指定精度和范围
DECLARE
SUBTYPE My_Subtype1 IS number(4,1);
a1 My_Subtype1;
BEGIN
a1 :=123.4;
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
-- 基类型为基本类型(char),指定not null约束
DECLARE
SUBTYPE My_Subtype1 IS char(4) NOT NULL;
a1 My_Subtype1;
BEGIN
a1 :='abc';
DBMS_OUTPUT.PUT_LINE(a1);
END;
ERROR, SUBTYPE 声明为 NOT NULL 的变量必须有初始化赋值
#1: at Program line 2 (a1 My_Subtype1;)
/
DECLARE
SUBTYPE My_Subtype1 IS char(4) NOT NULL;
a1 My_Subtype1 DEFAULT 'def';
BEGIN
DBMS_OUTPUT.PUT_LINE(a1);
a1 :='abc';
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
-- 基类型为基本类型(varchar),指定字符集
DECLARE
SUBTYPE My_Subtype1 IS varchar CHARACTER SET SQL_TEXT;
a1 My_Subtype1;
BEGIN
a1 :='abc';
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
-- 基类型为基本类型(int),指定range范围
DECLARE
SUBTYPE My_Subtype1 IS int RANGE 1..10;
a1 My_Subtype1;
BEGIN
a1 :=1;
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
-- 基类型可以为用户自定义类型
DECLARE
TYPE rec1 is record(c1 int);
SUBTYPE My_Subtype1 IS rec1;
a1 My_Subtype1;
BEGIN
a1.c1 := 1;
DBMS_OUTPUT.PUT_LINE(a1.c1);
a1.c1 := 2;
DBMS_OUTPUT.PUT_LINE(a1.c1);
END;
/