DM自定義數(shù)據(jù)類型-創(chuàng)新互聯(lián)

自定義類型
用戶使用CREATE TYPE語句可以定義記錄類型、對象類型、命名的數(shù)組類型、集合類型等,如果在對象類型中聲明了過程或方法,可以使用CREATE TYPE BODY定義這些過程和方法。

創(chuàng)新互聯(lián)秉承實現(xiàn)全網(wǎng)價值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),成都網(wǎng)站設(shè)計、成都做網(wǎng)站,微信平臺小程序開發(fā),網(wǎng)頁設(shè)計制作,成都手機(jī)網(wǎng)站制作,營銷型網(wǎng)站建設(shè)幫助傳統(tǒng)企業(yè)實現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

創(chuàng)建類型可以使用CREATE TYPE語句創(chuàng)建記錄類型、對象類型、數(shù)組和集合類型。
語法格式
CREATE [OR REPLACE] TYPE [< 模式名>.]< 類型名>[WITH ENCRYPTION] [< 調(diào)用權(quán)限子句>] AS|IS < 記錄類型定義子句>|< 對象類型定義子句>
|< 數(shù)組類型定義子句>|< 集合類型定義子句>
[< 調(diào)用權(quán)限子句>]::= AUTHID DEFINER
| AUTHID CURRENT_USER
< 對象類型定義子句> ::= OBJECT [UNDER [< 模式名>.]< 父類型名>] (< 對象定義>,{< 對象定義>})[[NOT] FINAL] [[NOT] INSTANTIABLE]
< 對象定義> ::= < 變量列表定義>|< 過程聲明>|< 函數(shù)聲明>|< 構(gòu)造函數(shù)聲明>
< 過程聲明> ::= [< 方法繼承屬性>][STATIC|MEMBER] PROCEDURE < 過程名> < 參數(shù)列表>
< 函數(shù)聲明> ::= [< 方法繼承屬性>][MAP] [STATIC|MEMBER] FUNCTION < 函數(shù)名> < 參數(shù)列表> RETURN < 返回值數(shù)據(jù)類型>[DETERMINISTIC]
[PIPELINED]
< 方法繼承屬性> ::= < 重載屬性> | | < 重載屬性>
< 重載屬性> ::= [NOT] OVERRDING
::= FINAL | NOT FINAL | INSTANTIABLE | NOT INSTANTIABLE
< 構(gòu)造函數(shù)聲明> ::= CONSTRUCTOR FUNCTION < 函數(shù)名> < 參數(shù)列表> RETURN SELF AS RESULT
< 記錄類型定義子句> ::= RECORD(變量列表定義)
< 數(shù)組類型定義子句> ::= ARRAY < 數(shù)據(jù)類型>' [' [< 常量表達(dá)式>]{,[< 常量表達(dá)式>]}']'
< 集合類型定義子句> ::= < 數(shù)組集合定義子句>|< 嵌套表定義子句>|< 索引表定義子句>
< 數(shù)組集合定義子句> ::= VARRAY(< 常量表達(dá)式>) OF < 數(shù)據(jù)類型>
< 嵌套表定義子句> ::= TABLE OF < 數(shù)據(jù)類型>
< 索引表定義子句> ::= TABLE OF < 數(shù)據(jù)類型> [INDEX BY < 數(shù)據(jù)類型>]

使用說明
1. 對象類型中過程和函數(shù)的聲明都是前向聲明,類型定義中不包括任何實現(xiàn)代碼;達(dá)夢系統(tǒng)中對象類型與類是等價的。
2. 對象類型中過程和函數(shù)可以聲明為STATIC類型,表明為靜態(tài)過程或函數(shù);也可以聲明為MEMBER,表明為成員過程或函數(shù),非STATIC且非構(gòu)造函數(shù)的方法缺省為成員方法。MAP表示將對象類型的實例映射為標(biāo)量數(shù)值,只能用于成員函數(shù);
3. 關(guān)于對象類型的繼承,參考12.1節(jié)中類繼承的相關(guān)說明;
4. WITH ENCRYPTION 選項,指定是否對自定義類型定義進(jìn)行加密;
5. 記錄類型的定義格式與對象類型類似,但記錄類型中不能有過程和函數(shù)聲明;
6. 在< 數(shù)組類型定義子句>的數(shù)組長度定義的[]內(nèi)添加’,’可以定義多維數(shù)組。若指定了常量表達(dá)式,則定義的是靜態(tài)數(shù)組,其數(shù)組長度是固定的。若沒有指定常量表達(dá)式,則定義的是動態(tài)數(shù)組,其數(shù)組長度是在使用時指定。理論上DM支持靜態(tài)數(shù)組的每一個維度的大長度為65534,動態(tài)數(shù)組的每一個維度的大長度為2147483646,但是數(shù)組大長度同時受系統(tǒng)內(nèi)部空間大小的限制,如果超出堆棧/堆的空間限制,系統(tǒng)會報錯。
7. 數(shù)組集合類型中的常量表達(dá)式定義了其大容量,其數(shù)組元素數(shù)據(jù)類型可以是基礎(chǔ)類型,也可以是自定義數(shù)據(jù)類型。
8. 嵌套表類型和索引表類型沒有元素個數(shù)限制,元素數(shù)據(jù)類型可以是基礎(chǔ)數(shù)據(jù)類型也可以是其它自定義類型或是對象、記錄、靜態(tài)數(shù)組,但是不能是動態(tài)數(shù)組;第二個則是索引表的下標(biāo)類型,目前僅支持INTEGER/INT和VARCHAR兩種類型,分別代表整數(shù)下標(biāo)和字符串下標(biāo)。對于VARCHAR類型,長度不能超過1024。

所需權(quán)限
1. 使用該語句的用戶必須是DBA或具有CREATE TYPE數(shù)據(jù)庫權(quán)限的用戶。
2.可以用關(guān)鍵字AUTHID DEFINER |AUTHID CURRENT_USER指定自定義類型的調(diào)用者權(quán)限,若為DEFINER,則采用自定義類型定義者權(quán)限,若為CURRENT_USER則為當(dāng)前用戶權(quán)限,默認(rèn)為定義者權(quán)限。

創(chuàng)建類型體對于對象類型中聲明的過程和函數(shù),在類型體中進(jìn)行實現(xiàn)。
語法格式
CREATE [OR REPLACE] TYPE BODY [< 模式名>.]< 類型名>[WITH ENCRYPTION] AS|IS < 對象類型體定義子句> END
< 對象類型體定義子句>::= < 對象類型體定義>,{< 對象類型體定義>}
< 對象類型體定義>::= < 過程實現(xiàn)>|< 函數(shù)實現(xiàn)>|< 構(gòu)造函數(shù)實現(xiàn)>
< 過程實現(xiàn)> ::= [< 方法繼承屬性>][STATIC|MEMBER] PROCEDURE < 過程名> < 參數(shù)列表> AS|IS BEGIN < 實現(xiàn)體> END [過程名]
< 函數(shù)實現(xiàn)> ::= [< 方法繼承屬性>][MAP] [STATIC|MEMBER] FUNCTION < 函數(shù)名>< 參數(shù)列表> RETURN < 返回值數(shù)據(jù)類型>[DETERMINISTIC]
[PIPELINED] AS|IS BEGIN < 實現(xiàn)體> END [函數(shù)名]
< 方法繼承屬性> ::= < 重載屬性> | | < 重載屬性>
< 重載屬性> ::= [NOT] OVERRDING
::= FINAL | NOT FINAL | INSTANTIABLE | NOT INSTANTIABLE
< 構(gòu)造函數(shù)實現(xiàn)> ::= CONSTRUCTOR FUNCTION < 函數(shù)名> < 參數(shù)列表> RETURN SELF AS RESULT AS|IS BEGIN < 實現(xiàn)體> END [函數(shù)名]

使用說明
1. 對象類型體中的過程、函數(shù)定義必須和類型定義中的前向聲明完全相同。包括過程的名字、參數(shù)定義列表的參數(shù)名和數(shù)據(jù)類型定義;

所需權(quán)限
使用該語句的用戶必須是DBA或該類型對象的擁有者且具有CREATE TYPE數(shù)據(jù)庫權(quán)限的用戶。

重編譯類型
重新對類型進(jìn)行編譯,如果重新編譯失敗,則將類型置為禁止?fàn)顟B(tài)。
重編功能主要用于檢驗類型的正確性。
語法格式
ALTER TYPE [< 模式名>.]< 類型名> COMPILE [DEBUG];
參數(shù)
1.< 模式名> 指明被重編譯的類型所屬的模式;
2.< 類型名> 指明被重編譯的類型的名字;
3.[DEBUG] 可忽略。

所需權(quán)限
執(zhí)行該操作的用戶必須是類型的創(chuàng)建者,或者具有DBA權(quán)限。

刪除類型
類型的刪除分為類型刪除和類型體的刪除。對于擁有類型體的對象類型,刪除類型會將類型體一起刪除;刪除類型體的話,類型本身依然存在。

刪除類型使用DROP TYPE完成類型的刪除。對于擁有類型體的對象類型,刪除類型會將類型體一起刪除。
語法格式
DROP TYPE [< 模式名>.]< 類型名>[RESTRICT | CASCADE];
使用說明
1.如果被刪除的類型不屬于當(dāng)前模式,必須在語句中指明模式名;
2.如果一個擁有類型體的對象類型被刪除,那么對應(yīng)的類型體被自動刪除。

所需權(quán)限
執(zhí)行該操作的用戶必須是該類型的擁有者,或者具有DBA權(quán)限。

刪除類型體
使用DROP TYPE BODY刪除一個對象類型的類型體。
語法格式
DROP TYPE BODY [< 模式名>.]< 類型名>[RESTRICT | CASCADE]; 使用說明
如果被刪除的類型體不屬于當(dāng)前模式,必須在語句中指明模式名。

所需權(quán)限
執(zhí)行該操作的用戶必須是該類型的擁有者,或者具有DBA權(quán)限。

自定義類型的使用
使用規(guī)則
1. 對象類型與類等價,類的使用規(guī)則可詳見第12章《類類型》;
2. 創(chuàng)建的記錄類型、數(shù)組類型和集合類型,可以直接在DMSQL程序語句塊中使用,不必在語句塊中聲明類型,使用方式可參見10.1.1節(jié)部分;

3. 用戶自定義數(shù)據(jù)類型可以作為其他用戶自定義數(shù)據(jù)類型的元素類型或成員變量類型;
4. 只有對象類型可以直接作為表中列的數(shù)據(jù)類型;其他類型只能作為對象類型中成員變量的類型或類型中嵌套使用的數(shù)據(jù)類型。但含有索引表類型和游標(biāo)類型的對象類型也不能作為表中列的數(shù)據(jù)類型。

應(yīng)用實例
創(chuàng)建一個用來表示復(fù)數(shù)的對象類型,有實數(shù)部分和虛數(shù)部分,并實現(xiàn)了復(fù)數(shù)的加與減的操作。

SQL> CREATE TYPE COMPLEX AS OBJECT(
2     RPART REAL,
3     IPART REAL,
4     FUNCTION PLUS(X COMPLEX) RETURN COMPLEX,
5     FUNCTION LES(X COMPLEX) RETURN COMPLEX
6   );
7   /
executed successfully
used time: 53.553(ms). Execute id is 128
SQL> CREATE TYPE BODY COMPLEX AS
2     FUNCTION PLUS(X COMPLEX) RETURN COMPLEX IS
3     BEGIN
4      RETURN COMPLEX(RPART+X.RPART, IPART+X.IPART);
5     END;
6     FUNCTION LES(X COMPLEX) RETURN COMPLEX IS
7     BEGIN
8      RETURN COMPLEX(RPART-X.RPART, IPART-X.IPART);
9     END;
10  END;
11  /
executed successfully
used time: 14.330(ms). Execute id is 129.

建立表c_tab,表中的第二列的列類型為complex對象類型。

SQL> CREATE TABLE C_TAB(C1 INT, C2 COMPLEX);
executed successfully
used time: 16.381(ms). Execute id is 130.
SQL> INSERT INTO C_TAB VALUES(1, COMPLEX(2,3));
affect rows 1
used time: 1.508(ms). Execute id is 131.

向表c_tab中插入數(shù)據(jù)

SQL> INSERT INTO C_TAB VALUES(2, COMPLEX(4,2).PLUS(COMPLEX(2,3)));
affect rows 1
used time: 0.969(ms). Execute id is 132.
SQL> commit;
executed successfully
used time: 10.709(ms). Execute id is 133.
SQL> select * from c_tab;
LINEID     C1          C2
---------- ----------- -------------------
1          1           SYSDBA.COMPLEX(2,3)
2          2           SYSDBA.COMPLEX(6,5)
used time: 1.047(ms). Execute id is 134.

網(wǎng)站標(biāo)題:DM自定義數(shù)據(jù)類型-創(chuàng)新互聯(lián)
文章來源:http://bm7419.com/article42/dpojhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、標(biāo)簽優(yōu)化網(wǎng)站制作、網(wǎng)站導(dǎo)航、虛擬主機(jī)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司