![達(dá)夢(mèng)數(shù)據(jù)庫DM8 SQL程序設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view5/M01/0C/31/wKhkGGZ5p3eAWAYEAAESf4kSeAE008.jpg)
![達(dá)夢(mèng)數(shù)據(jù)庫DM8 SQL程序設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view5/M01/0C/31/wKhkGGZ5p3eAWAYEAAESf4kSeAE0082.jpg)
![達(dá)夢(mèng)數(shù)據(jù)庫DM8 SQL程序設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view5/M01/0C/31/wKhkGGZ5p3eAWAYEAAESf4kSeAE0083.jpg)
![達(dá)夢(mèng)數(shù)據(jù)庫DM8 SQL程序設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view5/M01/0C/31/wKhkGGZ5p3eAWAYEAAESf4kSeAE0084.jpg)
![達(dá)夢(mèng)數(shù)據(jù)庫DM8 SQL程序設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view5/M01/0C/31/wKhkGGZ5p3eAWAYEAAESf4kSeAE0085.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
|達(dá)夢(mèng)技術(shù)手冊(cè)
DM8SQL程序設(shè)計(jì)
ServicemanualofDM8_Sql_Program
DM8SQL程序設(shè)計(jì)
前百
概述
DMSQL程序是DM提供的一種過程化SQL語言。本文檔介紹了DMSQL程序支持的各種
語法、功能及其使用方法,并提供了大量示例。讀者在閱讀完本文檔后可以自行設(shè)計(jì)較為復(fù)
雜的DMSQL程序以實(shí)現(xiàn)復(fù)雜應(yīng)用邏輯。
讀者對(duì)象
本文檔主要適用于DM數(shù)據(jù)庫的:
?開發(fā)工程師
?測(cè)試工程師
?技術(shù)支持工程師
?數(shù)據(jù)庫管理員
通用約定
在本文檔中可能出現(xiàn)下列標(biāo)志,它們所代表的含義如下:
表0.1標(biāo)志含義
志說明
表示可能導(dǎo)致系統(tǒng)損壞、數(shù)據(jù)丟失或不可預(yù)知的結(jié)果。
警告:
1表示可能導(dǎo)致性能降低、服務(wù)不可用。
注意:
鼎可以幫助您解決某個(gè)問題或節(jié)省您的時(shí)間。
I?WWWWIftA
11說明:表示正文的附加信息,是對(duì)正文的強(qiáng)調(diào)和補(bǔ)充。
DM8SQL程序設(shè)計(jì)
在本文檔中可能出現(xiàn)下列格式,它們所代表的含義如下:
表0.2格式含義
格式說明
宋體表示正文。
Couriernew表示代碼或者屏幕顯示內(nèi)容。
表示命令行中的關(guān)鍵字(命令中保持不變、必須照輸?shù)牟糠郑┗蛘哒闹袕?qiáng)調(diào)的內(nèi)容。
粗體
標(biāo)題、警告、注意、小竅門、說明等內(nèi)容均采用粗體。
<>語法符號(hào)中,表示一個(gè)語法對(duì)象。
語法符號(hào)中,表示定義符,用來定義一個(gè)語法對(duì)象。定義符左邊為語法對(duì)象,右邊為相
::=
應(yīng)的語法描述。
1語法符號(hào)中,表示或者符,限定的語法選項(xiàng)在實(shí)際語句中只能出現(xiàn)一個(gè)。
語法符號(hào)中,大括號(hào)內(nèi)的語法選項(xiàng)在實(shí)際的語句中可以出現(xiàn)0...N次(N為大于0的自然
()
數(shù)),但是大括號(hào)本身不能出現(xiàn)在語句中。
語法符號(hào)中,中括號(hào)內(nèi)的語法選項(xiàng)在實(shí)際的語句中可以出現(xiàn)0...1次,但是中括號(hào)本身
[]
不能出現(xiàn)在語句中。
關(guān)鍵字在DM_SQL語言中具有特殊意義,在SQL語法描述中,關(guān)鍵字以大寫形式出
關(guān)鍵字
現(xiàn)。但在實(shí)際書寫SQL語句時(shí),關(guān)鍵字既可以大寫也可以小寫。
II
DM8SQL程序設(shè)計(jì)
目錄
1概述............................................................................1
1.1DMSQL程序簡介............................................................1
1.2使用DMSQL程序的優(yōu)點(diǎn).....................................................1
1.3一個(gè)簡單的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í)間數(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動(dòng)態(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存儲(chǔ)過程.................................................................32
III
DM8SQL程序設(shè)計(jì)
3.2存儲(chǔ)函數(shù).................................................................34
3.3客戶端DMSQL程序........................................................37
3.4參數(shù).....................................................................38
3.5變量.....................................................................40
3.6使用ORREPLACE選項(xiàng).....................................................43
3.7調(diào)用權(quán)限子句..............................................................43
3.8調(diào)用、重新編譯與刪除存儲(chǔ)模塊..............................................43
3.8.1調(diào)用存儲(chǔ)模塊........................................................43
3.8.2重新編譯存儲(chǔ)模塊.....................................................45
3.8.3刪除存儲(chǔ)模塊........................................................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è)計(jì)
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動(dòng)態(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動(dòng)態(tài)SQL.........................................................89
5.4返回查詢結(jié)果集............................................................92
5.5自治事務(wù).................................................................93
5.5.1定義自治事務(wù).........................................................93
5.5.2自治事務(wù)完整性與死鎖檢測(cè).............................................94
5.5.3自治事務(wù)嵌套.........................................................95
6DMSQL程序異常處理...........................................................97
6.1異常處理的優(yōu)點(diǎn)............................................................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è)計(jì)
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è)計(jì)
1概述
1.1DMSQL程序簡介
DMSQL程序是達(dá)夢(mèng)數(shù)據(jù)庫對(duì)標(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ù),而不是一種獨(dú)立的工具,它是和DM數(shù)據(jù)庫服務(wù)器緊密結(jié)合
在一起的??梢哉J(rèn)為這種技術(shù)是執(zhí)行DMSQL程序的一種機(jī)器,它可以接受任何有效的
DMSQL程序,按照語言本身所規(guī)定的語義執(zhí)行,并將結(jié)果返回給客戶。
DMSQL程序可以分為存儲(chǔ)模塊和客戶端DMSQL程序兩類。
用戶可以使用DMSQL程序語言創(chuàng)建過程或函數(shù),稱為存儲(chǔ)過程和存儲(chǔ)函數(shù)。這些過程
或函數(shù)像普通的過程或函數(shù)一樣,有輸入、輸出參數(shù)和返回值,它們與表和視圖等數(shù)據(jù)庫對(duì)
象一樣被存儲(chǔ)在數(shù)據(jù)庫中,供用戶隨時(shí)調(diào)用。存儲(chǔ)過程和存儲(chǔ)函數(shù)在功能上相當(dāng)于客戶端的
一段SQL批處理程序,但是在許多方面有著后者無法比擬的優(yōu)點(diǎn),它為用戶提供了一種高效
率的編程手段,成為現(xiàn)代數(shù)據(jù)庫系統(tǒng)的重要特征。通常,我們將存儲(chǔ)過程和存儲(chǔ)函數(shù)統(tǒng)稱為
存儲(chǔ)模塊。
客戶端DMSQL程序可以實(shí)現(xiàn)的功能與存儲(chǔ)模塊一致,不同的是客戶端DMSQL程序并
不創(chuàng)建一個(gè)具體的數(shù)據(jù)庫對(duì)象。其處理方法為DM數(shù)據(jù)庫服務(wù)器在預(yù)編譯階段將客戶端
DMSQL程序轉(zhuǎn)化為虛過程。虛過程不需要存儲(chǔ),創(chuàng)建后立即執(zhí)行,當(dāng)執(zhí)行的語句釋放時(shí),
虛過程對(duì)象也一同被釋放??蛻舳薉MSQL程序只從語法上和存儲(chǔ)模塊兼容,完成和存儲(chǔ)模
塊一樣的功能,是一種編程手段。
1.2使用DMSQL程序的優(yōu)點(diǎn)
DMSQL程序具有以下優(yōu)點(diǎn):
/與SQL語言的完美結(jié)合
SQL語言已成為數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,DMSQL程序支持所有SQL數(shù)據(jù)類型和所有SQL
函數(shù),同時(shí)支持所有DM對(duì)象類型。在DMSQL程序中可以使用SELECT、INSERT,
DELETE.UPDATE數(shù)據(jù)操作語句,事務(wù)控制語句,游標(biāo)操縱語句以及通過動(dòng)態(tài)SQL執(zhí)行
1
DM8SQL程序設(shè)計(jì)
DDL語句。與SQL語言的完美結(jié)合使得DMSQL程序不僅能實(shí)現(xiàn)SQL的所有功能,且由于
其自身的程序設(shè)計(jì)特性,能提供更加豐富、強(qiáng)大的功能。
/提供更高的生產(chǎn)率
在使用DMSQL程序設(shè)計(jì)應(yīng)用時(shí),圍繞存儲(chǔ)過程/函數(shù)進(jìn)行設(shè)計(jì),可以避免重復(fù)編碼,
提高生產(chǎn)率;在自頂向下設(shè)計(jì)應(yīng)用時(shí),不必關(guān)心實(shí)現(xiàn)的細(xì)節(jié);編程方便。從DM7開始,支
持C和JAVA語言語法的DMSQL程序,這樣在對(duì)自定義的DMSQL程序語法不熟悉的情況
下也可以對(duì)數(shù)據(jù)庫進(jìn)行各種操作,對(duì)數(shù)據(jù)庫的操作更加靈活,也更加容易。
/提供更好的性能
DMSQL存儲(chǔ)模塊在創(chuàng)建時(shí)被編譯成偽碼序列,在運(yùn)行時(shí)不需要重新進(jìn)行編譯和優(yōu)化處理,
具有更快的執(zhí)行速度,可以同時(shí)被多個(gè)用戶調(diào)用,并能夠減少操作錯(cuò)誤。使用存儲(chǔ)模塊可減
少應(yīng)用對(duì)DM的調(diào)用,降低系統(tǒng)資源浪費(fèi),顯著提高性能,尤其是對(duì)在網(wǎng)絡(luò)上與DM通訊的應(yīng)
用更加顯著。
/便于維護(hù)
用戶定義的存儲(chǔ)模塊在DM數(shù)據(jù)庫中集中存放,用戶可以根據(jù)需要隨時(shí)查詢、刪除或重
建它們,而調(diào)用這些存儲(chǔ)模塊的應(yīng)用程序可以不作任何修改,或只做少量調(diào)整。存儲(chǔ)模塊能
被其他的DMSQL程序或SQL命令調(diào)用,任何客戶/服務(wù)器工具都能訪問存儲(chǔ)模塊,具有很
好的可重用性。
/提供更高的安全性
存儲(chǔ)模塊可將用戶與具體的內(nèi)部數(shù)據(jù)操作進(jìn)行隔離,提高數(shù)據(jù)庫的安全性。如一個(gè)存儲(chǔ)
模塊查詢并修改一個(gè)表的某幾個(gè)列,管理員將這個(gè)存儲(chǔ)模塊的執(zhí)行權(quán)限授予某用戶,而不必
將表的訪問和修改權(quán)限授予這個(gè)用戶,保證用戶只訪問修改其需要的數(shù)據(jù)。
可以使用DM的管理工具管理存儲(chǔ)在數(shù)據(jù)庫中的存儲(chǔ)模塊的安全性,可以授予或撤銷數(shù)
據(jù)庫其他用戶執(zhí)行存儲(chǔ)模塊的權(quán)限。
1.3一個(gè)簡單的DMSQL程序示例
下面通過一個(gè)簡單的例子讓讀者對(duì)DMSQL程序有一個(gè)直觀的了解。
CREATEORREPLACEPROCEDURERESOURCES.person_accountAS
DECLARE
person_countINT;
2
DM8SQL程序設(shè)計(jì)
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)建一個(gè)名為RESOURCES.person_account的存儲(chǔ)過程,其中定義了變量,
在執(zhí)行部分執(zhí)行一條SELECT語句,打印查詢結(jié)果,并對(duì)查詢結(jié)果進(jìn)行判斷,如果查詢出的
值<5,則拋出一個(gè)異常,否則不做任何處理。
這個(gè)例子用到了DMSQL程序的定義存儲(chǔ)過程、變量定義、執(zhí)行DML語句、控制語句、
拋出異常等功能,而DMSQL程序的功能遠(yuǎn)不止這些,后續(xù)章節(jié)將對(duì)DMSQL程序的功能一一
進(jìn)行介紹。
3
DM8SQL程序設(shè)計(jì)
2DMSQL程序數(shù)據(jù)類型與操作符
DMSQL程序支持所有的DMSQL數(shù)據(jù)類型,包括:精確數(shù)值數(shù)據(jù)類型、近似數(shù)值數(shù)據(jù)
類型、字符數(shù)據(jù)類型、多媒體數(shù)據(jù)類型、一般日期時(shí)間數(shù)據(jù)類型、時(shí)間間隔數(shù)據(jù)類型。
此外,為了進(jìn)一步提高DMSQL程序的程序設(shè)計(jì)屬性,DMSQL程序還擴(kuò)展支持
了豺YPE、%ROWTYPE、記錄類型、數(shù)組類型、集合類型和類類型,用戶還可以定義自己
的子類型。
2.1常規(guī)數(shù)據(jù)類型
2.1.1數(shù)值數(shù)據(jù)類型
1.NUMERIC類型
語法:
NUMERIC[(精度[,標(biāo)度])]
功能:
NUMERIC數(shù)據(jù)類型用于存儲(chǔ)零、正負(fù)定點(diǎn)數(shù)。其中:精度是一個(gè)無符號(hào)整數(shù),定義
了總的數(shù)字?jǐn)?shù),精度范圍是1至38,標(biāo)度定義了小數(shù)點(diǎn)右邊的數(shù)字位數(shù),定義時(shí)如省略
精度,則默認(rèn)是16。如省略標(biāo)度,則默認(rèn)是Oo一個(gè)數(shù)的標(biāo)度不應(yīng)大于其精度。例如:
NUMERIC(4,1)定義了小數(shù)點(diǎn)前面3位和小數(shù)點(diǎn)后面1位,共4位的數(shù)字,范圍在-
999.9到999.9。所有NUMERIC數(shù)據(jù)類型,如果其值超過精度,達(dá)夢(mèng)數(shù)據(jù)庫返回一個(gè)
出錯(cuò)信息,如果超過標(biāo)度,則多余的位截?cái)唷?/p>
如果不指定精度和標(biāo)度,缺省精度為38。
2.NUMBER類型
語法:
NUMBER[(精度[,標(biāo)度])]
功能:
與NUMERIC類型相同。
3.DECIMAL/DEC類型
4
DM8SQL程序設(shè)計(jì)
語法:
DECIMAL[(精度[,標(biāo)度])]
DEC[(精度[,標(biāo)度])]
功能:
與NUMERIC相似。
4.BIT類型
語法:
BIT
功能:
BIT類型用于存儲(chǔ)整數(shù)數(shù)據(jù)1、0或NULL,可以用來支持ODBC和JDBC的布爾數(shù)據(jù)
類型。DM的BIT類型與SQLSERVER2000的BIT數(shù)據(jù)類型相似。
5.INTEGER/1NT類型
語法:
INTEGER
INT
功能:
用于存儲(chǔ)有符號(hào)整數(shù),精度為10,標(biāo)度為0。取值范圍為:-2147483648(-
2八31)?+2147483647(271-1)。
6.PLS_INTEGER類型
語法:
PLS_INTEGER
功能:
與INTEGER相同。
7.BIGINT類型
語法:
BIGINT
功能:
用于存儲(chǔ)有符號(hào)整數(shù),精度為19,標(biāo)度為0。取值范圍為:-
9223372036854775808(-2-63)?9223372036854775807(2八63-2)。
5
DM8SQL程序設(shè)計(jì)
8.TINYINT類型
語法:
TINYINT
功能:
用于存儲(chǔ)有符號(hào)整數(shù),精度為3,標(biāo)度為0。取值范圍為:-128-+127,
9.BYTE類型
語法:
BYTE
功能:
與T工NY1NT相似,精度為3,標(biāo)度為0。
10.SMALLINT類型
語法:
SMALLINT
功能:
用于存儲(chǔ)有符號(hào)整數(shù),精度為5,標(biāo)度為0。
11.BINARY類型
語法:
BINARY[(長度)]
功能:
BINARY數(shù)據(jù)類型指定定長二進(jìn)制數(shù)據(jù)。缺省長度為1個(gè)字節(jié),最大長度由數(shù)據(jù)庫頁面
大小決定,具體可參考《DM8_SQL語言使用手冊(cè)》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ù)類型,可以指定
一個(gè)正整數(shù)作為數(shù)據(jù)長度。缺省長度為8188個(gè)字節(jié),最大長度由數(shù)據(jù)庫頁面大小決定,
具體可參考《DM8_SQL語言使用手冊(cè)》1.4.1節(jié)。
6
DM8SQL程序設(shè)計(jì)
13.REAL類型
語法:
REAL
功能:
REAL是帶二進(jìn)制的浮點(diǎn)數(shù),但它不能由用戶指定使用的精度,系統(tǒng)指定其二進(jìn)制精
度為24,十進(jìn)制精度為7.取值范圍-3.4E+38?3.4E+38。
14.FLOAT類型
語法:
FLOAT[(精度)J
功能:
FLOAT是帶二進(jìn)制精度的浮點(diǎ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
功能:
該類型指明雙精度浮點(diǎn)數(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è)計(jì)
CHARACTER[(長度)]
功能:
定長字符串,最大長度由數(shù)據(jù)庫頁面大小決定,具體可參考《DM8_SQL語言使用手冊(cè)》
1.4.1節(jié)。長度不足時(shí),自動(dòng)填充空格。
2.VARCHAR類型
語法:
VARCHAR[(長度)]
功能:
可變長字符串,最大長度由數(shù)據(jù)庫頁面大小決定,具體可參考《DM8_SQL語言使用手
冊(cè)》1.4.1節(jié)。
2.1.3多媒體數(shù)據(jù)類型
1.TEXT/LONGVARCHAR類型
語法:
TEXT
LONGVARCHAR
功能:
變長字符串類型,其字符串的長度最大為2G-1,可用于存儲(chǔ)長的文本串。
2.IMAGE/LONGVARBINARY類型
語法:
IMAGE
LONGVARBINARY
功能:
可用于存儲(chǔ)多媒體信息中的圖像類型。圖像由不定長的象素點(diǎn)陣組成,長度最大為
2G-1字節(jié)。該類型除了存儲(chǔ)圖像數(shù)據(jù)之外,還可用于存儲(chǔ)任何其它二進(jìn)制數(shù)據(jù)。
3.BLOB類型
語法:
BLOB
8
DM8SQL程序設(shè)計(jì)
功能:
BLOB類型用于指明變長的二進(jìn)制大對(duì)象,長度最大為2G-1字節(jié)。
4.CLOB類型
語法:
CLOB
功能:
CLOB類型用于指明變長的字符串,長度最大為2G-1字節(jié)。
5.BFILE類型
語法:
BFILE
功能:
BFILE用于指明存儲(chǔ)在操作系統(tǒng)中的二進(jìn)制文件,文件存儲(chǔ)在操作系統(tǒng)而非數(shù)據(jù)庫中,
僅能進(jìn)行只讀訪問。
2.1.4日期時(shí)間數(shù)據(jù)類型
DMSQL程序支持的日期時(shí)間數(shù)據(jù)類型分為一般日期時(shí)間數(shù)據(jù)類型、時(shí)區(qū)數(shù)據(jù)類型和時(shí)
間間隔數(shù)據(jù)類型三類。
2.1.4.1一般日期時(shí)間數(shù)據(jù)類型
1.DATE類型
語法:
DATE
功能:
DATE類型包括年、月、日信息,定義了,-4712-01-01,和,9999-12-31,之間任
何一個(gè)有效的格里高利日期。
2.TIME類型
語法:
TIME[(小數(shù)秒精度)]
9
DM8SQL程序設(shè)計(jì)
功能:
TIME類型包括時(shí)、分、秒信息,定義了一個(gè)在,00:00:00.000000,和
,23:59:59.999999,之間的有效時(shí)間。TIME類型的小數(shù)秒精度規(guī)定了秒字段中小數(shù)點(diǎn)
后面的位數(shù),取值范圍為0?6,如果未定義,缺省精度為0。
3.TIMESTAMP/DATETIME類型
語法:
TIMESTAMP[(小數(shù)秒精度)]
DATETIME[(小數(shù)秒精度)]
功能:
TIMESTAMP/DATETIME類型包括年、月、日、時(shí)、分、秒信息,定義了一個(gè)在'-
4712-01-0100:00:00.000000'和,9999-12-3123:59:59.999999,之間的有效
格里高利日期時(shí)間。小數(shù)秒精度規(guī)定了秒字段中小數(shù)點(diǎn)后面的位數(shù),取值范圍為0?6,如
果未定義,缺省精度為6。
2.1.4.2時(shí)區(qū)數(shù)據(jù)類型
1.TIMEWITHTIMEZONE類型
語法:
TIME[(小數(shù)秒精度)]WITHTIMEZONE
功能:
描述一個(gè)帶時(shí)區(qū)的TIME值,其定義是在TIME類型的后面加上時(shí)區(qū)信息。時(shí)區(qū)部分
的實(shí)質(zhì)是INTERVALHOURTOMINUTE類型,取值范圍:-12:59與+14:00之間。例
如:TIME'09:10:21+8:001
2.TIMESTAMPWITHTIMEZONE類型
語法:
TIMESTAMP[(小數(shù)秒精度)]WITHTIMEZONE
功能:
10
DM8SQL程序設(shè)計(jì)
描述一個(gè)帶時(shí)區(qū)的TIMESTAMP值,其定義是在TIMESTAMP類型的后面加上時(shí)區(qū)信
息。時(shí)區(qū)部分的實(shí)質(zhì)是工NTERVALHOURTOMINUTE類型,取值范圍:-12:59與
+14:00之間。例如:'2009-10-1119:03:05.0000-02:10'。
3.TIMESTAMPWITHLOCALTIMEZONE類型
語法:
TIMESTAMP[(小數(shù)秒精度)]WITHLOCALTIMEZONE
功能:
描述一個(gè)本地時(shí)區(qū)的TIMESTAMP值,能夠?qū)?biāo)準(zhǔn)時(shí)區(qū)類型TIMESTAMPWITH
TIMEZONE類型轉(zhuǎn)化為本地時(shí)區(qū)類型,如果插入的值沒有指定時(shí)區(qū),則默認(rèn)為本地時(shí)區(qū)。
2.1.4.3時(shí)間間隔數(shù)據(jù)類型
DM支持兩類十三種時(shí)間間隔類型:兩類是年-月間隔類和日-時(shí)間隔類,它們通過時(shí)
間間隔限定符區(qū)分,前者結(jié)合了日期字段年和月,后者結(jié)合了時(shí)間字段日、時(shí)、分、秒。
由時(shí)間間隔數(shù)據(jù)類型所描述的值總是有符號(hào)的。
對(duì)時(shí)間間隔類型的介紹見表2.1,需要查看更為詳細(xì)的信息可參看《DM8_SQL語言使
用手冊(cè)》1.4.3節(jié)。
表2.1DMSQL程序支持的時(shí)間間隔數(shù)據(jù)類型
類型名類型描述
年間隔,即兩個(gè)日期之間的年數(shù)字,P為時(shí)間間隔的首項(xiàng)字段精度
INTERVALYEAR(P)
(后面簡稱為:首精度)
INTERVALMONTH(P)月間隔,即兩個(gè)日期之間的月數(shù)字,P為時(shí)間間隔的首精度
INTERVALDAY(P)日間隔,即為兩個(gè)日期/時(shí)間之間的日數(shù)字,P為時(shí)間間隔的首精度
INTERVALHOUR(P)時(shí)間隔,即為兩個(gè)日期/時(shí)間之間的時(shí)數(shù)字,P為時(shí)間間隔的首精度
INTERVALMINUTE(P)分間隔,即為兩個(gè)日期/時(shí)間之間的分?jǐn)?shù)字,P為時(shí)間間隔的首精度
INTERVAL秒間隔,即為兩個(gè)日期/時(shí)間之間的秒數(shù)字,P為時(shí)間間隔的首精
SECOND(PZQ)度,Q為時(shí)間間隔秒精度
INTERVALYEAR(P)年月間隔,即兩個(gè)日期之間的年月數(shù)字,P為時(shí)間間隔的首精度
TOMONTH
INTERVALDAY(P)TO日時(shí)間隔,即為兩個(gè)日期/時(shí)間之間的日時(shí)數(shù)字,P為時(shí)間間隔的首
HOUR精度
INTERVALDAY(P)TO日時(shí)分間隔,即為兩個(gè)日期/時(shí)間之間的日時(shí)分?jǐn)?shù)字,P為時(shí)間間隔
MINUTE的首精度
11
DM8SQL程序設(shè)計(jì)
INTERVALDAY(P)TO日時(shí)分秒間隔,即為兩個(gè)日期/時(shí)間之間的日時(shí)分秒數(shù)字,P為時(shí)間
SECOND(Q)間隔的首精度,Q為時(shí)間間隔秒精度
INTERVALLHOUR(P)時(shí)分間隔,即為兩個(gè)日期/時(shí)間之間的時(shí)分?jǐn)?shù)字,P為時(shí)間間隔的首
TOMINUTE精度
INTERVALHOUR(P)時(shí)分秒間隔,即為兩個(gè)日期/時(shí)間之間的時(shí)分秒數(shù)字,P為時(shí)間間隔
TOSECOND(Q)的首精度,Q為時(shí)間間隔秒精度
INTERVALMINUTE(P)分秒間隔,即為兩個(gè)日期/時(shí)間之間的分秒間隔,P為時(shí)間間隔的首
TOSECOND(Q)精度,Q為時(shí)間間隔秒精度
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
在許多時(shí)候,DMSQL程序變量被用來處理存儲(chǔ)在數(shù)據(jù)庫表中的數(shù)據(jù)。這種情況下,變
量應(yīng)該擁有與表列相同的類型。例如表T(1DINT,NAMEVARCHAR(30))中字段NAME
類型為VARCHAR(30)。對(duì)應(yīng)地在DMSQL程序中,我們可以聲明一個(gè)變量:
DECLARE
V_NAMEVARCHAR(30);
但是如果T中的NAME字段定義發(fā)生了變化,比如變?yōu)閂ARCHAR(100)。那么存儲(chǔ)過
程中的變量V_NAME也要相應(yīng)修改為:
DECLARE
V_NAMEVARCHAR(100);
如果用戶應(yīng)用中有很多的變量以及DMSQL程序代碼,這種處理可能是十分耗時(shí)和容易
出錯(cuò)的。
12
DM8SQL程序設(shè)計(jì)
為了解決上述問題,DMSQL程序提供了nYPE類型。gTYPE可以將變量同表列的類
型進(jìn)行綁定。例如:
DECLARE
V_NAMET.NAME宅TYPE;
通過使用%TYPE,V_NAME將擁有T表的NAME列所擁有的類型。如果表T的NAME
列類型定義發(fā)生變化,V_NAME的類型也隨之自動(dòng)發(fā)生變化,而不需要用戶手動(dòng)修改。例
如,使用%TYPE把變量vl的類型和表PERSON.ADDRESS的ADDRESS1列類型進(jìn)
行綁定。
DECLARE
v_typePERSON.ADDRESS.ADDRESS1宅TYPE;
BEGIN
SELECTADDRESS1INTOv_typeFROMPERSON.ADDRESSWHEREADDRESS工D=l;
PRINTv_type;
END;
/
與義TYPE類似,%ROWTYPE將返回一個(gè)基于表定義的運(yùn)算類型,它將一個(gè)記錄聲明為
具有相同類型的數(shù)據(jù)庫行。例如:
DECLARE
V_TRECT%ROWTYPE;
將定義一個(gè)記錄,該記錄中的字段與表T中的行相對(duì)應(yīng)。V_TREC變量會(huì)擁有這樣的
結(jié)構(gòu):(IDINT,NAMEVARCHAR(30))。如果表定義改變了,那么3ROWTYPE定義的
變量也會(huì)隨之改變。
例如,使用為ROWTYPE將變量v_row與表PERSON.ADDRESS的行相對(duì)應(yīng)。
DECLARE
v_rowPERSON.ADDRESS%ROWTYPE;
curCURSOR;
BEGIN
OPENcurFORSELECT*FROMPERSON.ADDRESSWHEREADDRESSID=3;
FETCHcurINTOv_row;
PRINTvrow.ADDRESSID;
DM8SQL程序設(shè)計(jì)
PRINTv_row.ADDRESSl;
CLOSEcur;
END;
在DMSQL程序設(shè)計(jì)中使用%丁丫口后和%ROWTYPE是一種非常好的編程風(fēng)
小竅門:格,它使得DMSQL程序更加靈活,更適應(yīng)于對(duì)數(shù)據(jù)庫的處理。
2.3記錄類型
記錄類型是由單行多列的標(biāo)量類型構(gòu)成復(fù)合類型,類似于c語言中的結(jié)構(gòu)。記錄類型
提供了處理分立但又作為一個(gè)整體單元的相關(guān)變量的一種機(jī)制。例如:DECLAREV_ID
INT;V_NAMEVARCHAR(30);這兩個(gè)變量在邏輯上是相互關(guān)聯(lián)的,因?yàn)樗鼈兎謩e對(duì)應(yīng)
表T(工DINT,NAMEVARCHAR(30))中的兩個(gè)字段。如果為這樣的變量聲明一個(gè)記錄類
型,那么它們之間的關(guān)系就十分明顯了。
定義記錄類型的語法如下:
TYPE〈記錄類型名>ISRECORD
(〈字段名〉〈數(shù)據(jù)類型》[〈default子句〉]{,《字段名〉〈數(shù)據(jù)類型》[〈default子句〉]});
(default子句〉::=〈default子句1>I〈default子句2>
〈default子句1〉::=DEFAULT〈缺省值)
(default子句2>::=:=(缺省值〉
通過將需要操作的表結(jié)構(gòu)定義成一個(gè)記錄,可以方便地對(duì)表中的行數(shù)據(jù)進(jìn)行操作。在
DMSQL程序中使用記錄,需要先定義一個(gè)RECORD類型,再用該類型聲明變量,也可以使
用上一小節(jié)介紹的老ROWTYPE來創(chuàng)建與表結(jié)構(gòu)匹配的記錄。
可以單獨(dú)對(duì)記錄中的字段賦值,使用點(diǎn)標(biāo)記引用一個(gè)記錄中的字段(記錄名.字段
名)。
例如,下面的例子定義了一個(gè)記錄類型sale_person,聲明一個(gè)該記錄類型的變量
v_rec,使用點(diǎn)標(biāo)記為v_rec的兩個(gè)字段賦值,之后使用v_rec更新表的一行數(shù)據(jù)。
DECLARE
TYPEsale_personISRECORD(
IDSALES.SALESPERSON.SALESPERSON工D%TYPE,
SALESTHISYEARSALES.SALESPERSON.SALESTHISYEAR%TYPE);
14
DM8SQL程序設(shè)計(jì)
v_recsale_person;
BEGIN
v_rec.ID:=1;
v_rec.SALESTHISYEAR:=5500;
UPDATESALES.SALESPERSONSETSALESTHISYEAR=v_rec.SALESTHISYEARWHERE
SALESPERSONID=v_rec.ID;
END;
/
也可以將一個(gè)記錄直接賦值給另外一個(gè)記錄,此時(shí)兩個(gè)記錄中的字段類型定義必須完
全一致。如下面的例子將表中的一行數(shù)據(jù)讀取到一個(gè)記錄中。然后,將記錄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í),字段的數(shù)據(jù)類型除了可以是常規(guī)數(shù)據(jù)類型,還可以是常規(guī)數(shù)據(jù)類型
后跟著“[n]”或表示一維或多維數(shù)組,如:
DECLARE
TYPET_RECISRECORD(IDINT[3],NAMEVARCHAR(30)[3]);
DMSQL程序還支持定義包含數(shù)組、集合和其他RECORD的RECORD。例如下面是一個(gè)
在RECORD定義中包含其他RECORD的例子,關(guān)于數(shù)組和集合的介紹請(qǐng)看后續(xù)小節(jié)。
15
DM8SQL程序設(shè)計(jì)
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ù)組類型和動(dòng)態(tài)數(shù)組類型。
?注意:DM數(shù)組下標(biāo)的起始值為1。
2.4.1靜態(tài)數(shù)組類型
靜態(tài)數(shù)組是在聲明時(shí)已經(jīng)確定了數(shù)組大小的數(shù)組,其長度是預(yù)先定義好的,在整個(gè)程
序中,一旦給定大小后就無法改變。
定義靜態(tài)數(shù)組類型的語法圖例如下:
——UTYP曰-《array[S卜”ARRAV[qdatatype)const_exp~
IoJ
定義了靜態(tài)數(shù)組類型后需要用這個(gè)類型申明一個(gè)數(shù)組變量然后進(jìn)行操作。
理論上DM支持靜態(tài)數(shù)組的每一個(gè)維度的最大長度為65534,但是靜態(tài)數(shù)組最大長度
同時(shí)受系統(tǒng)內(nèi)部堆??臻g大小的限制,如果超出堆棧的空間限制,系統(tǒng)會(huì)報(bào)錯(cuò)。
下面是一個(gè)使用靜態(tài)數(shù)組的例子:
DECLARE
TYPEArrISARRAYVARCHAR⑶;--TYPE定義一維數(shù)組類型
16
DM8SQL程序設(shè)計(jì)
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動(dòng)態(tài)數(shù)組類型
與靜態(tài)數(shù)組不同,動(dòng)態(tài)數(shù)組可以隨程序需要而重新指定大小
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國自動(dòng)式雙面研磨床行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 土地廠房買賣合同
- 空心磚采購合同
- 石材采購合同范本
- 涂料勞務(wù)承包合同協(xié)議書
- 醫(yī)療器械配送合同
- 汽車貨物運(yùn)輸合同樣本
- 2025農(nóng)村簡易買賣合同
- 2025如何確定勞動(dòng)合同的成立商業(yè)保理資格
- 最高額抵押擔(dān)保合同
- 2025財(cái)年美國國防預(yù)算概覽-美國國防部(英)
- 2024年江西省南昌市中考一模數(shù)學(xué)試題(含答案)
- 48貴州省貴陽市2023-2024學(xué)年五年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 《采暖空調(diào)節(jié)能技術(shù)》課件
- 游戲綜合YY頻道設(shè)計(jì)模板
- arcgis軟件操作解析課件
- 中興ZCTP 5GC高級(jí)工程師認(rèn)證考試題庫匯總(含答案)
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)教程PPT全套完整教學(xué)課件
- 小學(xué)科學(xué)項(xiàng)目化作業(yè)的設(shè)計(jì)與實(shí)施研究
- 2020年中考生物試卷及答案
- MCNP-5A程序使用說明書
評(píng)論
0/150
提交評(píng)論