達(dá)夢數(shù)據(jù)庫DM8 SQL程序設(shè)計_第1頁
達(dá)夢數(shù)據(jù)庫DM8 SQL程序設(shè)計_第2頁
達(dá)夢數(shù)據(jù)庫DM8 SQL程序設(shè)計_第3頁
達(dá)夢數(shù)據(jù)庫DM8 SQL程序設(shè)計_第4頁
達(dá)夢數(shù)據(jù)庫DM8 SQL程序設(shè)計_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論