




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
|達(dá)夢技術(shù)手冊
DM8SQL程序設(shè)計
ServicemanualofDM8_Sql_Program
DM8SQL程序設(shè)計
前百
概述
DMSQL程序是DM提供的一種過程化SQL語言。本文檔介紹了DMSQL程序支持的各種
語法、功能及其使用方法,并提供了大量示例。讀者在閱讀完本文檔后可以自行設(shè)計較為復(fù)
雜的DMSQL程序以實現(xiàn)復(fù)雜應(yīng)用邏輯。
讀者對象
本文檔主要適用于DM數(shù)據(jù)庫的:
?開發(fā)工程師
?測試工程師
?技術(shù)支持工程師
?數(shù)據(jù)庫管理員
通用約定
在本文檔中可能出現(xiàn)下列標(biāo)志,它們所代表的含義如下:
表0.1標(biāo)志含義
志說明
表示可能導(dǎo)致系統(tǒng)損壞、數(shù)據(jù)丟失或不可預(yù)知的結(jié)果。
警告:
1表示可能導(dǎo)致性能降低、服務(wù)不可用。
注意:
鼎可以幫助您解決某個問題或節(jié)省您的時間。
I?WWWWIftA
11說明:表示正文的附加信息,是對正文的強(qiáng)調(diào)和補(bǔ)充。
DM8SQL程序設(shè)計
在本文檔中可能出現(xiàn)下列格式,它們所代表的含義如下:
表0.2格式含義
格式說明
宋體表示正文。
Couriernew表示代碼或者屏幕顯示內(nèi)容。
表示命令行中的關(guān)鍵字(命令中保持不變、必須照輸?shù)牟糠郑┗蛘哒闹袕?qiáng)調(diào)的內(nèi)容。
粗體
標(biāo)題、警告、注意、小竅門、說明等內(nèi)容均采用粗體。
<>語法符號中,表示一個語法對象。
語法符號中,表示定義符,用來定義一個語法對象。定義符左邊為語法對象,右邊為相
::=
應(yīng)的語法描述。
1語法符號中,表示或者符,限定的語法選項在實際語句中只能出現(xiàn)一個。
語法符號中,大括號內(nèi)的語法選項在實際的語句中可以出現(xiàn)0...N次(N為大于0的自然
()
數(shù)),但是大括號本身不能出現(xiàn)在語句中。
語法符號中,中括號內(nèi)的語法選項在實際的語句中可以出現(xiàn)0...1次,但是中括號本身
[]
不能出現(xiàn)在語句中。
關(guān)鍵字在DM_SQL語言中具有特殊意義,在SQL語法描述中,關(guān)鍵字以大寫形式出
關(guān)鍵字
現(xiàn)。但在實際書寫SQL語句時,關(guān)鍵字既可以大寫也可以小寫。
II
DM8SQL程序設(shè)計
目錄
1概述............................................................................1
1.1DMSQL程序簡介............................................................1
1.2使用DMSQL程序的優(yōu)點.....................................................1
1.3一個簡單的DMSQL程序示例.................................................2
2DMSQL程序數(shù)據(jù)類型與操作符....................................................4
2.1常規(guī)數(shù)據(jù)類型...............................................................4
2.1.1數(shù)值數(shù)據(jù)類型.........................................................4
2.1.2字符數(shù)據(jù)類型..........................................................7
2.1.3多媒體數(shù)據(jù)類型........................................................8
2.1.4日期時間數(shù)據(jù)類型......................................................9
2.1.5BOOL/BOOLEAN數(shù)據(jù)類型.............................................12
2.2%TYPE^fl%ROWTYPE..................................................................................................................12
2.3記錄類型.................................................................14
2.4數(shù)組類型.................................................................16
2.4.1靜態(tài)數(shù)組類型........................................................16
2.4.2動態(tài)數(shù)組類型........................................................17
2.4.3復(fù)雜類型數(shù)組.......................................................19
2.5集合類型.................................................................21
2.5.1VARRAY..................................................................................................................................21
2.5.2索引表..............................................................22
2.5.3嵌套表..............................................................25
2.5.4集合類型支持的方法...................................................26
2.6類類型...................................................................30
2.7子類型...................................................................30
2.8操作符...................................................................30
3DMSQL程序的定義、調(diào)用與刪除.................................................32
3.1存儲過程.................................................................32
III
DM8SQL程序設(shè)計
3.2存儲函數(shù).................................................................34
3.3客戶端DMSQL程序........................................................37
3.4參數(shù).....................................................................38
3.5變量.....................................................................40
3.6使用ORREPLACE選項.....................................................43
3.7調(diào)用權(quán)限子句..............................................................43
3.8調(diào)用、重新編譯與刪除存儲模塊..............................................43
3.8.1調(diào)用存儲模塊........................................................43
3.8.2重新編譯存儲模塊.....................................................45
3.8.3刪除存儲模塊........................................................45
4DMSQL程序中的各種控制結(jié)構(gòu)...................................................47
4.1語句塊...................................................................47
4.2分支結(jié)構(gòu).................................................................49
4.2.1IF語句..............................................................49
4.2.2CASE語句..........................................................53
4.2.3SWITCH語句........................................................55
4.3循環(huán)控制結(jié)構(gòu)..............................................................56
4.3.1LOOP語句..........................................................56
4.3.2WHILE語句.........................................................57
4.3.3FOR語句.............................................................58
4.3.4REPEAT語句........................................................59
4.3.5FORALL語句........................................................60
4.3.6EXIT語句...........................................................61
4.3.7CONTINUE語句......................................................64
4.4順序結(jié)構(gòu).................................................................66
4.4.1GOTO語句...........................................................66
4.4.2NULL語句..........................................................67
4.5其他語句.................................................................68
4.5.1賦值語句.............................................................68
4.5.2調(diào)用語句.............................................................69
IV
DM8SQL程序設(shè)計
4.5.3RETURN語句........................................................71
4.5.4PRINT語句.........................................................71
4.5.5PIPEROW語句.......................................................72
5DMSQL程序中的SQL語句.......................................................74
5.1普通靜態(tài)SQL語句.........................................................74
5.1.1數(shù)據(jù)操縱.............................................................74
5.1.2數(shù)據(jù)查詢.............................................................75
5.1.3事務(wù)控制.............................................................76
5.2游標(biāo).....................................................................77
5.2.1靜態(tài)游標(biāo).............................................................77
5.2.2動態(tài)游標(biāo).............................................................83
5.2.3游標(biāo)變量(引用游標(biāo)).................................................85
5.2.4使用游標(biāo)更新、刪除數(shù)據(jù)...............................................86
5.2.5使用游標(biāo)FOR循環(huán)....................................................87
5.3動態(tài)SQL.........................................................89
5.4返回查詢結(jié)果集............................................................92
5.5自治事務(wù).................................................................93
5.5.1定義自治事務(wù).........................................................93
5.5.2自治事務(wù)完整性與死鎖檢測.............................................94
5.5.3自治事務(wù)嵌套.........................................................95
6DMSQL程序異常處理...........................................................97
6.1異常處理的優(yōu)點............................................................97
6.2預(yù)定義異常................................................................97
6.3用戶自定義異常............................................................98
6.4異常的拋出...............................................................101
6.5內(nèi)置函數(shù)SQLCODE和SQLERRM.....................................102
6.6異常處理部分.............................................................103
7基于C、JAVA語法的DMSQL程序...............................................107
7.1C語法DMSQL程序........................................................107
7.2JAVA語法DMSQL程序...................................................109
V
DM8SQL程序設(shè)計
8DMSQL程序調(diào)試..............................................................112
8.1使用命令行工具DMDBG調(diào)試DMSQL程序......................................112
8.1.1dmdbg工具命令簡介................................................112
8.1.2使用dmdbg工具.....................................................113
8.2使用圖形化客戶端工具M(jìn)ANAGER調(diào)試DMSQL程序..............................125
DM8SQL程序設(shè)計
1概述
1.1DMSQL程序簡介
DMSQL程序是達(dá)夢數(shù)據(jù)庫對標(biāo)準(zhǔn)SQL語言的擴(kuò)展,是一種過程化SQL語言。在DMSQL
程序中,包括一整套數(shù)據(jù)類型、條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和異常處理結(jié)構(gòu)等,DMSQL程序中可
以執(zhí)行SQL語句,SQL語句中也可以使用DMSQL函數(shù)。
DMSQL程序是一種技術(shù),而不是一種獨立的工具,它是和DM數(shù)據(jù)庫服務(wù)器緊密結(jié)合
在一起的??梢哉J(rèn)為這種技術(shù)是執(zhí)行DMSQL程序的一種機(jī)器,它可以接受任何有效的
DMSQL程序,按照語言本身所規(guī)定的語義執(zhí)行,并將結(jié)果返回給客戶。
DMSQL程序可以分為存儲模塊和客戶端DMSQL程序兩類。
用戶可以使用DMSQL程序語言創(chuàng)建過程或函數(shù),稱為存儲過程和存儲函數(shù)。這些過程
或函數(shù)像普通的過程或函數(shù)一樣,有輸入、輸出參數(shù)和返回值,它們與表和視圖等數(shù)據(jù)庫對
象一樣被存儲在數(shù)據(jù)庫中,供用戶隨時調(diào)用。存儲過程和存儲函數(shù)在功能上相當(dāng)于客戶端的
一段SQL批處理程序,但是在許多方面有著后者無法比擬的優(yōu)點,它為用戶提供了一種高效
率的編程手段,成為現(xiàn)代數(shù)據(jù)庫系統(tǒng)的重要特征。通常,我們將存儲過程和存儲函數(shù)統(tǒng)稱為
存儲模塊。
客戶端DMSQL程序可以實現(xiàn)的功能與存儲模塊一致,不同的是客戶端DMSQL程序并
不創(chuàng)建一個具體的數(shù)據(jù)庫對象。其處理方法為DM數(shù)據(jù)庫服務(wù)器在預(yù)編譯階段將客戶端
DMSQL程序轉(zhuǎn)化為虛過程。虛過程不需要存儲,創(chuàng)建后立即執(zhí)行,當(dāng)執(zhí)行的語句釋放時,
虛過程對象也一同被釋放。客戶端DMSQL程序只從語法上和存儲模塊兼容,完成和存儲模
塊一樣的功能,是一種編程手段。
1.2使用DMSQL程序的優(yōu)點
DMSQL程序具有以下優(yōu)點:
/與SQL語言的完美結(jié)合
SQL語言已成為數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,DMSQL程序支持所有SQL數(shù)據(jù)類型和所有SQL
函數(shù),同時支持所有DM對象類型。在DMSQL程序中可以使用SELECT、INSERT,
DELETE.UPDATE數(shù)據(jù)操作語句,事務(wù)控制語句,游標(biāo)操縱語句以及通過動態(tài)SQL執(zhí)行
1
DM8SQL程序設(shè)計
DDL語句。與SQL語言的完美結(jié)合使得DMSQL程序不僅能實現(xiàn)SQL的所有功能,且由于
其自身的程序設(shè)計特性,能提供更加豐富、強(qiáng)大的功能。
/提供更高的生產(chǎn)率
在使用DMSQL程序設(shè)計應(yīng)用時,圍繞存儲過程/函數(shù)進(jìn)行設(shè)計,可以避免重復(fù)編碼,
提高生產(chǎn)率;在自頂向下設(shè)計應(yīng)用時,不必關(guān)心實現(xiàn)的細(xì)節(jié);編程方便。從DM7開始,支
持C和JAVA語言語法的DMSQL程序,這樣在對自定義的DMSQL程序語法不熟悉的情況
下也可以對數(shù)據(jù)庫進(jìn)行各種操作,對數(shù)據(jù)庫的操作更加靈活,也更加容易。
/提供更好的性能
DMSQL存儲模塊在創(chuàng)建時被編譯成偽碼序列,在運行時不需要重新進(jìn)行編譯和優(yōu)化處理,
具有更快的執(zhí)行速度,可以同時被多個用戶調(diào)用,并能夠減少操作錯誤。使用存儲模塊可減
少應(yīng)用對DM的調(diào)用,降低系統(tǒng)資源浪費,顯著提高性能,尤其是對在網(wǎng)絡(luò)上與DM通訊的應(yīng)
用更加顯著。
/便于維護(hù)
用戶定義的存儲模塊在DM數(shù)據(jù)庫中集中存放,用戶可以根據(jù)需要隨時查詢、刪除或重
建它們,而調(diào)用這些存儲模塊的應(yīng)用程序可以不作任何修改,或只做少量調(diào)整。存儲模塊能
被其他的DMSQL程序或SQL命令調(diào)用,任何客戶/服務(wù)器工具都能訪問存儲模塊,具有很
好的可重用性。
/提供更高的安全性
存儲模塊可將用戶與具體的內(nèi)部數(shù)據(jù)操作進(jìn)行隔離,提高數(shù)據(jù)庫的安全性。如一個存儲
模塊查詢并修改一個表的某幾個列,管理員將這個存儲模塊的執(zhí)行權(quán)限授予某用戶,而不必
將表的訪問和修改權(quán)限授予這個用戶,保證用戶只訪問修改其需要的數(shù)據(jù)。
可以使用DM的管理工具管理存儲在數(shù)據(jù)庫中的存儲模塊的安全性,可以授予或撤銷數(shù)
據(jù)庫其他用戶執(zhí)行存儲模塊的權(quán)限。
1.3一個簡單的DMSQL程序示例
下面通過一個簡單的例子讓讀者對DMSQL程序有一個直觀的了解。
CREATEORREPLACEPROCEDURERESOURCES.person_accountAS
DECLARE
person_countINT;
2
DM8SQL程序設(shè)計
BEGIN
SELECTCOUNT(*)INTOperson_countFROMRESOURCES.EMPLOYEE;
DBMS_OUTPUT.PUT_L工NE(,公司總?cè)藬?shù)'||person_count);
IFperson_count<5THEN
RAISE_APPLICATION_ERROR(-20001,'公司總?cè)藬?shù)過少!!);
ELSE
NULL;
ENDIF;
END;
/
該例子創(chuàng)建一個名為RESOURCES.person_account的存儲過程,其中定義了變量,
在執(zhí)行部分執(zhí)行一條SELECT語句,打印查詢結(jié)果,并對查詢結(jié)果進(jìn)行判斷,如果查詢出的
值<5,則拋出一個異常,否則不做任何處理。
這個例子用到了DMSQL程序的定義存儲過程、變量定義、執(zhí)行DML語句、控制語句、
拋出異常等功能,而DMSQL程序的功能遠(yuǎn)不止這些,后續(xù)章節(jié)將對DMSQL程序的功能一一
進(jìn)行介紹。
3
DM8SQL程序設(shè)計
2DMSQL程序數(shù)據(jù)類型與操作符
DMSQL程序支持所有的DMSQL數(shù)據(jù)類型,包括:精確數(shù)值數(shù)據(jù)類型、近似數(shù)值數(shù)據(jù)
類型、字符數(shù)據(jù)類型、多媒體數(shù)據(jù)類型、一般日期時間數(shù)據(jù)類型、時間間隔數(shù)據(jù)類型。
此外,為了進(jìn)一步提高DMSQL程序的程序設(shè)計屬性,DMSQL程序還擴(kuò)展支持
了豺YPE、%ROWTYPE、記錄類型、數(shù)組類型、集合類型和類類型,用戶還可以定義自己
的子類型。
2.1常規(guī)數(shù)據(jù)類型
2.1.1數(shù)值數(shù)據(jù)類型
1.NUMERIC類型
語法:
NUMERIC[(精度[,標(biāo)度])]
功能:
NUMERIC數(shù)據(jù)類型用于存儲零、正負(fù)定點數(shù)。其中:精度是一個無符號整數(shù),定義
了總的數(shù)字?jǐn)?shù),精度范圍是1至38,標(biāo)度定義了小數(shù)點右邊的數(shù)字位數(shù),定義時如省略
精度,則默認(rèn)是16。如省略標(biāo)度,則默認(rèn)是Oo一個數(shù)的標(biāo)度不應(yīng)大于其精度。例如:
NUMERIC(4,1)定義了小數(shù)點前面3位和小數(shù)點后面1位,共4位的數(shù)字,范圍在-
999.9到999.9。所有NUMERIC數(shù)據(jù)類型,如果其值超過精度,達(dá)夢數(shù)據(jù)庫返回一個
出錯信息,如果超過標(biāo)度,則多余的位截斷。
如果不指定精度和標(biāo)度,缺省精度為38。
2.NUMBER類型
語法:
NUMBER[(精度[,標(biāo)度])]
功能:
與NUMERIC類型相同。
3.DECIMAL/DEC類型
4
DM8SQL程序設(shè)計
語法:
DECIMAL[(精度[,標(biāo)度])]
DEC[(精度[,標(biāo)度])]
功能:
與NUMERIC相似。
4.BIT類型
語法:
BIT
功能:
BIT類型用于存儲整數(shù)數(shù)據(jù)1、0或NULL,可以用來支持ODBC和JDBC的布爾數(shù)據(jù)
類型。DM的BIT類型與SQLSERVER2000的BIT數(shù)據(jù)類型相似。
5.INTEGER/1NT類型
語法:
INTEGER
INT
功能:
用于存儲有符號整數(shù),精度為10,標(biāo)度為0。取值范圍為:-2147483648(-
2八31)?+2147483647(271-1)。
6.PLS_INTEGER類型
語法:
PLS_INTEGER
功能:
與INTEGER相同。
7.BIGINT類型
語法:
BIGINT
功能:
用于存儲有符號整數(shù),精度為19,標(biāo)度為0。取值范圍為:-
9223372036854775808(-2-63)?9223372036854775807(2八63-2)。
5
DM8SQL程序設(shè)計
8.TINYINT類型
語法:
TINYINT
功能:
用于存儲有符號整數(shù),精度為3,標(biāo)度為0。取值范圍為:-128-+127,
9.BYTE類型
語法:
BYTE
功能:
與T工NY1NT相似,精度為3,標(biāo)度為0。
10.SMALLINT類型
語法:
SMALLINT
功能:
用于存儲有符號整數(shù),精度為5,標(biāo)度為0。
11.BINARY類型
語法:
BINARY[(長度)]
功能:
BINARY數(shù)據(jù)類型指定定長二進(jìn)制數(shù)據(jù)。缺省長度為1個字節(jié),最大長度由數(shù)據(jù)庫頁面
大小決定,具體可參考《DM8_SQL語言使用手冊》1.4.1節(jié)。BINARY常量以O(shè)x開始,
后跟數(shù)據(jù)的十六進(jìn)制表示,例如0X2A3B4058。
12.VARBINARY類型
語法:
VARBINARY[(長度)]
功能:
VARBINARY數(shù)據(jù)類型指定變長二進(jìn)制數(shù)據(jù),用法類似BINARY數(shù)據(jù)類型,可以指定
一個正整數(shù)作為數(shù)據(jù)長度。缺省長度為8188個字節(jié),最大長度由數(shù)據(jù)庫頁面大小決定,
具體可參考《DM8_SQL語言使用手冊》1.4.1節(jié)。
6
DM8SQL程序設(shè)計
13.REAL類型
語法:
REAL
功能:
REAL是帶二進(jìn)制的浮點數(shù),但它不能由用戶指定使用的精度,系統(tǒng)指定其二進(jìn)制精
度為24,十進(jìn)制精度為7.取值范圍-3.4E+38?3.4E+38。
14.FLOAT類型
語法:
FLOAT[(精度)J
功能:
FLOAT是帶二進(jìn)制精度的浮點數(shù),精度最大不超過53,如省略精度,則二進(jìn)制精度
為53,十進(jìn)制精度為15。取值范圍為-1.7E+308~1.7E+308。
15.DOUBLE類型
語法:
DOUBLE[(精度)]
功能:
同F(xiàn)LOAT相似,精度最大不超過53。
16.DOUBLEPRECISION類型
語法:
DOUBLEPRECISION
功能:
該類型指明雙精度浮點數(shù),其二進(jìn)制精度為53,十進(jìn)制精度為15。取值范圍-1.7E
+308?1.7E+308?
2.1.2字符數(shù)據(jù)類型
1.CHAR/CHARACTER類型
語法:
CHAR[(長度)]
7
DM8SQL程序設(shè)計
CHARACTER[(長度)]
功能:
定長字符串,最大長度由數(shù)據(jù)庫頁面大小決定,具體可參考《DM8_SQL語言使用手冊》
1.4.1節(jié)。長度不足時,自動填充空格。
2.VARCHAR類型
語法:
VARCHAR[(長度)]
功能:
可變長字符串,最大長度由數(shù)據(jù)庫頁面大小決定,具體可參考《DM8_SQL語言使用手
冊》1.4.1節(jié)。
2.1.3多媒體數(shù)據(jù)類型
1.TEXT/LONGVARCHAR類型
語法:
TEXT
LONGVARCHAR
功能:
變長字符串類型,其字符串的長度最大為2G-1,可用于存儲長的文本串。
2.IMAGE/LONGVARBINARY類型
語法:
IMAGE
LONGVARBINARY
功能:
可用于存儲多媒體信息中的圖像類型。圖像由不定長的象素點陣組成,長度最大為
2G-1字節(jié)。該類型除了存儲圖像數(shù)據(jù)之外,還可用于存儲任何其它二進(jìn)制數(shù)據(jù)。
3.BLOB類型
語法:
BLOB
8
DM8SQL程序設(shè)計
功能:
BLOB類型用于指明變長的二進(jìn)制大對象,長度最大為2G-1字節(jié)。
4.CLOB類型
語法:
CLOB
功能:
CLOB類型用于指明變長的字符串,長度最大為2G-1字節(jié)。
5.BFILE類型
語法:
BFILE
功能:
BFILE用于指明存儲在操作系統(tǒng)中的二進(jìn)制文件,文件存儲在操作系統(tǒng)而非數(shù)據(jù)庫中,
僅能進(jìn)行只讀訪問。
2.1.4日期時間數(shù)據(jù)類型
DMSQL程序支持的日期時間數(shù)據(jù)類型分為一般日期時間數(shù)據(jù)類型、時區(qū)數(shù)據(jù)類型和時
間間隔數(shù)據(jù)類型三類。
2.1.4.1一般日期時間數(shù)據(jù)類型
1.DATE類型
語法:
DATE
功能:
DATE類型包括年、月、日信息,定義了,-4712-01-01,和,9999-12-31,之間任
何一個有效的格里高利日期。
2.TIME類型
語法:
TIME[(小數(shù)秒精度)]
9
DM8SQL程序設(shè)計
功能:
TIME類型包括時、分、秒信息,定義了一個在,00:00:00.000000,和
,23:59:59.999999,之間的有效時間。TIME類型的小數(shù)秒精度規(guī)定了秒字段中小數(shù)點
后面的位數(shù),取值范圍為0?6,如果未定義,缺省精度為0。
3.TIMESTAMP/DATETIME類型
語法:
TIMESTAMP[(小數(shù)秒精度)]
DATETIME[(小數(shù)秒精度)]
功能:
TIMESTAMP/DATETIME類型包括年、月、日、時、分、秒信息,定義了一個在'-
4712-01-0100:00:00.000000'和,9999-12-3123:59:59.999999,之間的有效
格里高利日期時間。小數(shù)秒精度規(guī)定了秒字段中小數(shù)點后面的位數(shù),取值范圍為0?6,如
果未定義,缺省精度為6。
2.1.4.2時區(qū)數(shù)據(jù)類型
1.TIMEWITHTIMEZONE類型
語法:
TIME[(小數(shù)秒精度)]WITHTIMEZONE
功能:
描述一個帶時區(qū)的TIME值,其定義是在TIME類型的后面加上時區(qū)信息。時區(qū)部分
的實質(zhì)是INTERVALHOURTOMINUTE類型,取值范圍:-12:59與+14:00之間。例
如:TIME'09:10:21+8:001
2.TIMESTAMPWITHTIMEZONE類型
語法:
TIMESTAMP[(小數(shù)秒精度)]WITHTIMEZONE
功能:
10
DM8SQL程序設(shè)計
描述一個帶時區(qū)的TIMESTAMP值,其定義是在TIMESTAMP類型的后面加上時區(qū)信
息。時區(qū)部分的實質(zhì)是工NTERVALHOURTOMINUTE類型,取值范圍:-12:59與
+14:00之間。例如:'2009-10-1119:03:05.0000-02:10'。
3.TIMESTAMPWITHLOCALTIMEZONE類型
語法:
TIMESTAMP[(小數(shù)秒精度)]WITHLOCALTIMEZONE
功能:
描述一個本地時區(qū)的TIMESTAMP值,能夠?qū)?biāo)準(zhǔn)時區(qū)類型TIMESTAMPWITH
TIMEZONE類型轉(zhuǎn)化為本地時區(qū)類型,如果插入的值沒有指定時區(qū),則默認(rèn)為本地時區(qū)。
2.1.4.3時間間隔數(shù)據(jù)類型
DM支持兩類十三種時間間隔類型:兩類是年-月間隔類和日-時間隔類,它們通過時
間間隔限定符區(qū)分,前者結(jié)合了日期字段年和月,后者結(jié)合了時間字段日、時、分、秒。
由時間間隔數(shù)據(jù)類型所描述的值總是有符號的。
對時間間隔類型的介紹見表2.1,需要查看更為詳細(xì)的信息可參看《DM8_SQL語言使
用手冊》1.4.3節(jié)。
表2.1DMSQL程序支持的時間間隔數(shù)據(jù)類型
類型名類型描述
年間隔,即兩個日期之間的年數(shù)字,P為時間間隔的首項字段精度
INTERVALYEAR(P)
(后面簡稱為:首精度)
INTERVALMONTH(P)月間隔,即兩個日期之間的月數(shù)字,P為時間間隔的首精度
INTERVALDAY(P)日間隔,即為兩個日期/時間之間的日數(shù)字,P為時間間隔的首精度
INTERVALHOUR(P)時間隔,即為兩個日期/時間之間的時數(shù)字,P為時間間隔的首精度
INTERVALMINUTE(P)分間隔,即為兩個日期/時間之間的分?jǐn)?shù)字,P為時間間隔的首精度
INTERVAL秒間隔,即為兩個日期/時間之間的秒數(shù)字,P為時間間隔的首精
SECOND(PZQ)度,Q為時間間隔秒精度
INTERVALYEAR(P)年月間隔,即兩個日期之間的年月數(shù)字,P為時間間隔的首精度
TOMONTH
INTERVALDAY(P)TO日時間隔,即為兩個日期/時間之間的日時數(shù)字,P為時間間隔的首
HOUR精度
INTERVALDAY(P)TO日時分間隔,即為兩個日期/時間之間的日時分?jǐn)?shù)字,P為時間間隔
MINUTE的首精度
11
DM8SQL程序設(shè)計
INTERVALDAY(P)TO日時分秒間隔,即為兩個日期/時間之間的日時分秒數(shù)字,P為時間
SECOND(Q)間隔的首精度,Q為時間間隔秒精度
INTERVALLHOUR(P)時分間隔,即為兩個日期/時間之間的時分?jǐn)?shù)字,P為時間間隔的首
TOMINUTE精度
INTERVALHOUR(P)時分秒間隔,即為兩個日期/時間之間的時分秒數(shù)字,P為時間間隔
TOSECOND(Q)的首精度,Q為時間間隔秒精度
INTERVALMINUTE(P)分秒間隔,即為兩個日期/時間之間的分秒間隔,P為時間間隔的首
TOSECOND(Q)精度,Q為時間間隔秒精度
2.1.5BOOL/BOOLEAN數(shù)據(jù)類型
語法:
BOOL
BOOLEAN
功能:
布爾數(shù)據(jù)類型:TRUE和FALSE?DMSQL程序的布爾類型和INT類型可以相互轉(zhuǎn)化。
如果變量或方法返回的類型是布爾類型,則返回值為0或TRUE和非0值的返回值為1,
FALSE和0值返回為0。
2.2%TYPEfll%ROWTYPE
在許多時候,DMSQL程序變量被用來處理存儲在數(shù)據(jù)庫表中的數(shù)據(jù)。這種情況下,變
量應(yīng)該擁有與表列相同的類型。例如表T(1DINT,NAMEVARCHAR(30))中字段NAME
類型為VARCHAR(30)。對應(yīng)地在DMSQL程序中,我們可以聲明一個變量:
DECLARE
V_NAMEVARCHAR(30);
但是如果T中的NAME字段定義發(fā)生了變化,比如變?yōu)閂ARCHAR(100)。那么存儲過
程中的變量V_NAME也要相應(yīng)修改為:
DECLARE
V_NAMEVARCHAR(100);
如果用戶應(yīng)用中有很多的變量以及DMSQL程序代碼,這種處理可能是十分耗時和容易
出錯的。
12
DM8SQL程序設(shè)計
為了解決上述問題,DMSQL程序提供了nYPE類型。gTYPE可以將變量同表列的類
型進(jìn)行綁定。例如:
DECLARE
V_NAMET.NAME宅TYPE;
通過使用%TYPE,V_NAME將擁有T表的NAME列所擁有的類型。如果表T的NAME
列類型定義發(fā)生變化,V_NAME的類型也隨之自動發(fā)生變化,而不需要用戶手動修改。例
如,使用%TYPE把變量vl的類型和表PERSON.ADDRESS的ADDRESS1列類型進(jìn)
行綁定。
DECLARE
v_typePERSON.ADDRESS.ADDRESS1宅TYPE;
BEGIN
SELECTADDRESS1INTOv_typeFROMPERSON.ADDRESSWHEREADDRESS工D=l;
PRINTv_type;
END;
/
與義TYPE類似,%ROWTYPE將返回一個基于表定義的運算類型,它將一個記錄聲明為
具有相同類型的數(shù)據(jù)庫行。例如:
DECLARE
V_TRECT%ROWTYPE;
將定義一個記錄,該記錄中的字段與表T中的行相對應(yīng)。V_TREC變量會擁有這樣的
結(jié)構(gòu):(IDINT,NAMEVARCHAR(30))。如果表定義改變了,那么3ROWTYPE定義的
變量也會隨之改變。
例如,使用為ROWTYPE將變量v_row與表PERSON.ADDRESS的行相對應(yīng)。
DECLARE
v_rowPERSON.ADDRESS%ROWTYPE;
curCURSOR;
BEGIN
OPENcurFORSELECT*FROMPERSON.ADDRESSWHEREADDRESSID=3;
FETCHcurINTOv_row;
PRINTvrow.ADDRESSID;
DM8SQL程序設(shè)計
PRINTv_row.ADDRESSl;
CLOSEcur;
END;
在DMSQL程序設(shè)計中使用%丁丫口后和%ROWTYPE是一種非常好的編程風(fēng)
小竅門:格,它使得DMSQL程序更加靈活,更適應(yīng)于對數(shù)據(jù)庫的處理。
2.3記錄類型
記錄類型是由單行多列的標(biāo)量類型構(gòu)成復(fù)合類型,類似于c語言中的結(jié)構(gòu)。記錄類型
提供了處理分立但又作為一個整體單元的相關(guān)變量的一種機(jī)制。例如:DECLAREV_ID
INT;V_NAMEVARCHAR(30);這兩個變量在邏輯上是相互關(guān)聯(lián)的,因為它們分別對應(yīng)
表T(工DINT,NAMEVARCHAR(30))中的兩個字段。如果為這樣的變量聲明一個記錄類
型,那么它們之間的關(guān)系就十分明顯了。
定義記錄類型的語法如下:
TYPE〈記錄類型名>ISRECORD
(〈字段名〉〈數(shù)據(jù)類型》[〈default子句〉]{,《字段名〉〈數(shù)據(jù)類型》[〈default子句〉]});
(default子句〉::=〈default子句1>I〈default子句2>
〈default子句1〉::=DEFAULT〈缺省值)
(default子句2>::=:=(缺省值〉
通過將需要操作的表結(jié)構(gòu)定義成一個記錄,可以方便地對表中的行數(shù)據(jù)進(jìn)行操作。在
DMSQL程序中使用記錄,需要先定義一個RECORD類型,再用該類型聲明變量,也可以使
用上一小節(jié)介紹的老ROWTYPE來創(chuàng)建與表結(jié)構(gòu)匹配的記錄。
可以單獨對記錄中的字段賦值,使用點標(biāo)記引用一個記錄中的字段(記錄名.字段
名)。
例如,下面的例子定義了一個記錄類型sale_person,聲明一個該記錄類型的變量
v_rec,使用點標(biāo)記為v_rec的兩個字段賦值,之后使用v_rec更新表的一行數(shù)據(jù)。
DECLARE
TYPEsale_personISRECORD(
IDSALES.SALESPERSON.SALESPERSON工D%TYPE,
SALESTHISYEARSALES.SALESPERSON.SALESTHISYEAR%TYPE);
14
DM8SQL程序設(shè)計
v_recsale_person;
BEGIN
v_rec.ID:=1;
v_rec.SALESTHISYEAR:=5500;
UPDATESALES.SALESPERSONSETSALESTHISYEAR=v_rec.SALESTHISYEARWHERE
SALESPERSONID=v_rec.ID;
END;
/
也可以將一個記錄直接賦值給另外一個記錄,此時兩個記錄中的字段類型定義必須完
全一致。如下面的例子將表中的一行數(shù)據(jù)讀取到一個記錄中。然后,將記錄v_recl賦值
給v_rec2o
DECLARE
TYPEt_recISRECORD(ID工NT,NAMEVARCHAR(50));
TYPEt_rec_NEWISRECORD(ID工NT,NAMEVARCHAR(50));
v_reclT_REC;
v_rec2T_REC_NEW;
BEGIN
SELECTPRODUCT工D,NAMEINTOv_reclFROMPRODUCTION.PRODUCTWHEREAUTHOR
LIKE,魯迅,
v_rec2:=v_recl;
PRINTv_rec2.ID;
PRINTv_rec2.NAME;
END;
/
定義記錄類型時,字段的數(shù)據(jù)類型除了可以是常規(guī)數(shù)據(jù)類型,還可以是常規(guī)數(shù)據(jù)類型
后跟著“[n]”或表示一維或多維數(shù)組,如:
DECLARE
TYPET_RECISRECORD(IDINT[3],NAMEVARCHAR(30)[3]);
DMSQL程序還支持定義包含數(shù)組、集合和其他RECORD的RECORD。例如下面是一個
在RECORD定義中包含其他RECORD的例子,關(guān)于數(shù)組和集合的介紹請看后續(xù)小節(jié)。
15
DM8SQL程序設(shè)計
DECLARE
TYPETimeTypeISRECORD(hoursINT,minutesINT);一定義記錄TimeType
TYPEMeetingTypeISRECORD(
dayDATE,
time_ofTimeType--嵌套記錄TimeType
);
BEGIN
NULL;
END;
/
2.4數(shù)組類型
DMSQL程序支持?jǐn)?shù)組數(shù)據(jù)類型,包括靜態(tài)數(shù)組類型和動態(tài)數(shù)組類型。
?注意:DM數(shù)組下標(biāo)的起始值為1。
2.4.1靜態(tài)數(shù)組類型
靜態(tài)數(shù)組是在聲明時已經(jīng)確定了數(shù)組大小的數(shù)組,其長度是預(yù)先定義好的,在整個程
序中,一旦給定大小后就無法改變。
定義靜態(tài)數(shù)組類型的語法圖例如下:
——UTYP曰-《array[S卜”ARRAV[qdatatype)const_exp~
IoJ
定義了靜態(tài)數(shù)組類型后需要用這個類型申明一個數(shù)組變量然后進(jìn)行操作。
理論上DM支持靜態(tài)數(shù)組的每一個維度的最大長度為65534,但是靜態(tài)數(shù)組最大長度
同時受系統(tǒng)內(nèi)部堆棧空間大小的限制,如果超出堆棧的空間限制,系統(tǒng)會報錯。
下面是一個使用靜態(tài)數(shù)組的例子:
DECLARE
TYPEArrISARRAYVARCHAR⑶;--TYPE定義一維數(shù)組類型
16
DM8SQL程序設(shè)計
aArr;--聲明一維數(shù)組
TYPEArrlISARRAYVARCHAR[2,4];-TYPE定義二維數(shù)組類型
bArrl;一聲明二維數(shù)組
BEGIN
FORIIN1..3LOOP
a[I]:=I*10;
PRINTa[I];
ENDLOOP;
PRINT'-------';
FORIIN1..2LOOP
FORJIN1..4LOOP
b[I][J]=4*(I-l)+J;
PRINTb[I][J];
ENDLOOP;
ENDLOOP;
END;
2.4.2動態(tài)數(shù)組類型
與靜態(tài)數(shù)組不同,動態(tài)數(shù)組可以隨程序需要而重新指定大小
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口合同范本格式
- Unit 7 Be Wise with Money Period 3 Grammar 教學(xué)設(shè)計 2024-2025學(xué)年譯林版(2024)七年級英語上冊
- 勞務(wù)發(fā)包合同范本
- 動物投放景區(qū)合同范本
- 農(nóng)村菜田出租合同范本
- 出租養(yǎng)殖雞場合同范本
- 加工定制窗簾合同范本
- 保潔商場合同范本
- 包地收款合同范本
- 勞務(wù)中介代理招聘合同范本
- 《中國居民膳食指南》課件
- 銀行柜面業(yè)務(wù)操作流程手冊
- 燒烤配方出售合同范例
- 婦科手術(shù)麻醉
- Unit1RelationshipsLesson2HowDoWeLikeTeachers'Feedback課件高中英語北師大版選擇性
- 加油站加油合同范本
- 庫存管理規(guī)劃
- 河南省南陽市2024-2025學(xué)年七年級上學(xué)期期末模擬英語試題(含答案)
- 煤礦員工安全培訓(xùn)教材一通三防篇
- 表演課程教案完整版
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》試題及答案解析
評論
0/150
提交評論