VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

自定义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