達夢數據庫的自定義類型

達夢數據庫的自定義類型

達夢數據庫還可以自己定義類型,用戶使用 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;
達夢數據庫的自定義類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章