達夢數據庫的自定義類型

達夢數據庫的自定義類型

達夢數據庫還能夠本身定義類型,用戶使用 CREATE TYPE 語句能夠定義對象類型、數組類型、嵌套表類型等,若是在對象類型中聲明瞭過程或方法,可使用 CREATE TYPE BODY 定義這些過程和方法。數據庫

一、對象類型
--建立對象類型
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;
/
達夢數據庫的自定義類型ide

--創建一張測試表,表中的第二列的列類型爲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;
達夢數據庫的自定義類型函數

二、數據類型
--建立數組類型
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;
/
達夢數據庫的自定義類型對象

三、嵌套表類型
--建立對象
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;
/
達夢數據庫的自定義類型blog

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;
/
達夢數據庫的自定義類型ip

四、類型使用規則
1.做爲表中列類型或其餘類成員變量屬性的類型不能被修改,刪除時須要指定 CASCADE級聯刪除,類型中定義的數據類型,其名稱只在類型的聲明及實現中有效。若是類型內的函數的參數或返回值是類型內的數據類型,或是進行類型內成員變量的複製,須要在 DMSQL 程序中定義一個結構與之相同的類型。根據類型使用方式的不一樣,對象可分爲變量對象及列對象。變量對象指的是在 DMSQL 程 序語句塊中聲明的類型的變量;列對象指的是在表中類型的列。變量對象能夠修改其屬性的值而列對象不能。
2.變量對象的實例化,類型的實例化經過 NEW 表達式調用構造函數完成。
3.變量對象的引用,經過‘=’進行的類型變量之間的賦值所進行的是對象的引用,並無複製一個新的對象。
4.變量對象屬性訪問,能夠經過以下方式進行屬性的訪問。<對象名>.<屬性名>
5.變量對象成員方法調用,成員方法的調用經過如下方式調用: <對象名>.<成員方法名>(<參數>{,<參數>}),若是函數內修改了對象內屬性的值,則該修改生效。
6.列對象的插入,列對象的建立是經過 INSERT 語句向表中插入數據完成,插入語句中的值是變量對象,插入後存儲在表中的數據即爲列對象。
7.列對象的複製,存儲在表中的對象不容許對對象中成員變量的修改,經過 into 查詢或’=’進行的列到
變量的賦值所進行的是對象的賦值,生成了一個與列對象數據同樣的副本,在該副本上進行
的修改不會影響表中列對象的值。
8.列對象的屬性訪問,經過以下方式進行屬性的訪問: <列名>.<屬性名>
9.列對象的方法調用:<列名>.<成員方法名>(<參數>{,<參數>}),列對象方法調用過程當中對類型內屬性的修改,都是在列對象的副本上進行的,不會影響列對象的值。qt

  1. 建立的數組類型和嵌套類型,能夠直接在 DMSQL 程序語句塊中使用,沒必要在語句塊中聲明類型
  2. 用戶自定義數據類型能夠做爲其餘用戶自定義數據類型的元素類型或成員變量類型;
  3. 只有對象類型能夠直接做爲表中列的數據類型;其餘類型只能做爲對象類型中成員變量的類型或類型中嵌套使用的數據類型。但含有索引表類型和遊標類型的對象類型也不能做爲表中列的數據類型。

五、編譯類型和刪除類型
1)編譯類型:從新對類型進行編譯,若是從新編譯失敗,則將類型置爲禁止狀態。
alter type type_dxlx_test compile;
2)刪除類型:類型的刪除分爲兩種方式:一是類型頭的刪除,刪除類型頭則會順帶將類型體一塊兒刪除;另一種是類型體的刪除,這種方式只能刪除類型體,類型頭依然存在。
drop type body type_dxlx_test;
drop type type_dxlx_test cascade;
達夢數據庫的自定義類型

相關文章
相關標籤/搜索