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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論