自定义SUBTYPE
功能描述
Vastbase在Oracle兼容模式下支持在PL/pgSQL模块中定义subtype,包括在匿名块、函数、Package中定义。
注意事项
该功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
暂不支持基类型为关联数据、ref cursor。
语法格式
SUBTYPE subtype_name IS
base_type { precision [, scale ] | RANGE low_value .. high_value } [ NOT NULL ]
参数说明
subtype_name
子类型的名称。
base_type
指定子类型所基于的原始类型的名称。
precision
用于指定子类型值中允许的数字的总数。
如果base_type无法指定精度,则不要指定precision。
scale
用于指定子类型值中允许的小数的数量。
如果base_type无法指定小数数量,则不要指定scale。
RANGE low_value .. high_value
指定数值数据类型的受约束子类型的范围。low_value和high_value必须是数字文本。
NOT NULL
不为空约束。
示例
1、设置serveroutput 为on(允许将dbms_output.put_line的输出信息输出至vsql的命令界面的屏幕上)。
set serveroutput on;
2、创建匿名块使用NOT NULL约束, 不初始化时默认值为NULL,不符合约束则报错。
declare
subtype test123 is PLS_INTEGER range 1 .. 2 NOT NULL;
a test123;
begin
a := 1;
raise info 'a = %', a;
end;
/
结果显示为如下,不符合约束则报错:
ERROR: cannot assign non-composite value to a row variable
CONTEXT: PL/pgSQL function inline_code_block line 4 at assignment
3、创建匿名块使用NOT NULL约束, 初始化值不为空,可以正确执行。
declare
subtype test123 is PLS_INTEGER range 1 .. 2 NOT NULL;
a test123 := 2;
begin
a := 1;
raise info 'a = %', a;
end;
/
结果显示为如下:
INFO: a = 1
ANONYMOUS BLOCK EXECUTE