达梦数据库的自界说类型

达梦数据库还可以自己界说类型,用户使用 CREATE TYPE 语句可以界说工具类型、数组类型、嵌套表类型等,若是在工具类型中声明晰历程或方式,可以使用 CREATE TYPE BODY 界说这些历程和方式。

1、工具类型
--确立工具类型
create type type_dxlx_test as object(
rpart real,
ipart real,
function plus(x type_dxlx_test) return type_dxlx_test,
function les(x type_dxlx_test) return type_dxlx_test
);
/

--确立工具类型体
create type body type_dxlx_test as
function plus(x type_dxlx_test) return type_dxlx_test is
begin
return type_dxlx_test (rpart+x.rpart, ipart+x.ipart);
end;
function les(x type_dxlx_test) return type_dxlx_test is
begin
return type_dxlx_test (rpart-x.rpart, ipart-x.ipart);
end;
end;
/

--确立一张测试表,表中的第二列的列类型为type_dxlx_test工具类型,然后插入表测试
create table tab_dxlx_test (c1 int, c2 type_dxlx_test);
--向表中插入数据
insert into tab_dxlx_test values(1, type_dxlx_test (2,3));
insert into tab_dxlx_test values(2, type_dxlx_test (4,2).plus(type_dxlx_test (2,3)));
--查询表数据
select c2 from tab_dxlx_test;

2、数据类型
--确立数组类型
create or replace type type_szlx_test as object(
id varchar(20),
incount int,
providerid varchar(20)
);
/

create or replace type arr_type_szlx_test as varray(100) of type_szlx_test;
/

3、嵌套表类型
--确立工具
create or replace type type_qtblx_test
as object
(
aaz257 number(18),
bic230 varchar2(5),
constructor function type_qtblx_test return self as result
)
not final;
/

create or replace type body type_qtblx_test
is
constructor function type_qtblx_test return self as result is
begin
return;
end;
end;
/

--确立嵌套表
create or replace type qtb_type_qtblx_test as table of type_qtblx_test;
/

4、类型使用规则
1.作为表中列类型或其他类成员变量属性的类型不能被修改,删除时需要指定 CASCADE级联删除,类型中界说的数据类型,其名称只在类型的声明及实现中有用。若是类型内的函数的参数或返回值是类型内的数据类型,或是举行类型内成员变量的复制,需要在 DMSQL 程序中界说一个结构与之相同的类型。凭据类型使用方式的差别,工具可分为变量工具及列工具。变量工具指的是在 DMSQL 程 序语句块中声明的类型的变量;列工具指的是在表中类型的列。变量工具可以修改其属性的值而列工具不能。
2.变量工具的实例化,类型的实例化通过 NEW 表达式挪用组织函数完成。
3.变量工具的引用,通过‘=’举行的类型变量之间的赋值所举行的是工具的引用,并没有复制一个新的工具。
4.变量工具属性接见,可以通过如下方式举行属性的接见。<工具名>.<属性名>
5.变量工具成员方式挪用,成员方式的挪用通过以下方式挪用: <工具名>.<成员方式名>(<参数>{,<参数>}),若是函数内修改了工具内属性的值,则该修改生效。
6.列工具的插入,列工具的确立是通过 INSERT 语句向表中插入数据完成,插入语句中的值是变量工具,插入后存储在表中的数据即为列工具。
7.列工具的复制,存储在表中的工具不允许对工具中成员变量的修改,通过 into 查询或’=’举行的列到
变量的赋值所举行的是工具的赋值,生成了一个与列工具数据一样的副本,在该副本上举行
的修改不会影响表中列工具的值。
8.列工具的属性接见,通过如下方式举行属性的接见: <列名>.<属性名>
9.列工具的方式挪用:<列名>.<成员方式名>(<参数>{,<参数>}),列工具方式挪用历程中对类型内属性的修改,都是在列工具的副本上举行的,不会影响列工具的值。

  1. 确立的数组类型和嵌套类型,可以直接在 DMSQL 程序语句块中使用,不必在语句块中声明类型
  2. 用户自界说数据类型可以作为其他用户自界说数据类型的元素类型或成员变量类型;
  3. 只有工具类型可以直接作为表中列的数据类型;其他类型只能作为工具类型中成员变量的类型或类型中嵌套使用的数据类型。但含有索引表类型和游标类型的工具类型也不能作为表中列的数据类型。

5、编译类型和删除类型
1)编译类型:重新对类型举行编译,若是重新编译失败,则将类型置为禁止状态。
alter type type_dxlx_test compile;
2)删除类型:类型的删除分为两种方式:一是类型头的删除,删除类型头则会顺带将类型体一起删除;另外一种是类型体的删除,这种方式只能删除类型体,类型头依然存在。
drop type body type_dxlx_test;
drop type type_dxlx_test cascade;