數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程(達(dá)夢(mèng)DM8) 課件 6.1掌握數(shù)據(jù)類型與操作符_第1頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程(達(dá)夢(mèng)DM8) 課件 6.1掌握數(shù)據(jù)類型與操作符_第2頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程(達(dá)夢(mèng)DM8) 課件 6.1掌握數(shù)據(jù)類型與操作符_第3頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程(達(dá)夢(mèng)DM8) 課件 6.1掌握數(shù)據(jù)類型與操作符_第4頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程(達(dá)夢(mèng)DM8) 課件 6.1掌握數(shù)據(jù)類型與操作符_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)基礎(chǔ)(基于達(dá)夢(mèng)DM8)數(shù)據(jù)庫(kù)程序設(shè)計(jì)66.1掌握數(shù)據(jù)類型和操作符0102記錄類型%TYPE和%ROWTYPE03數(shù)組類型04集合類型05操作符6.1.1%TYPE和%ROWTYPE

在許多時(shí)候,DMSQL程序變量被用來(lái)處理存儲(chǔ)在數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。這種情況下,變量應(yīng)該擁有與表列相同的類型。如果用戶應(yīng)用中有很多的變量以及DMSQL程序代碼,這種處理可能是十分耗時(shí)和容易出錯(cuò)的。為了解決上述問(wèn)題,DMSQL程序提供了%TYPE數(shù)據(jù)類型和%ROWTYPE數(shù)據(jù)類型。%TYPE可以將變量同表列的類型進(jìn)行綁定。與%TYPE類似,%ROWTYPE將返回一個(gè)基于表定義的運(yùn)算類型,它將一個(gè)記錄聲明為具有相同類型的數(shù)據(jù)庫(kù)行。在DMSQL程序設(shè)計(jì)中使用%TYPE和%ROWTYPE是一種非常好的編程風(fēng)格,它使得DMSQL程序更加靈活,更適應(yīng)于對(duì)數(shù)據(jù)庫(kù)的處理。6.1.1%TYPE和%ROWTYPE

定義%TYPE變量的語(yǔ)法片段:DECLAREV_NAMET.NAME%TYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE

【案例6-1】設(shè)置一個(gè)與職工表姓名字段類型一致的變量V_NAME,將職工號(hào)3001職工的姓名記錄在V_NAME中并輸出。在輸出的V_NAME變量?jī)?nèi)容前增加提示語(yǔ)“所查找的職工姓名為:”。DECLARE

V_NAMESCH_FACTORY.STAFF.姓名%TYPE;BEGIN

SELECT姓名INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE職工號(hào)=3001;

PRINT('所查找的職工姓名為:'||V_NAME);END;/6.1.1%TYPE和%ROWTYPE

定義%ROWTYPE變量的語(yǔ)法片段:DECLAREV_TRECT%ROWTYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE

【案例6-2】設(shè)置一個(gè)與職工表數(shù)據(jù)行字段類型一致的變量V_NAME,將職工號(hào)3001職工的信息記錄在V_NAME中并輸出其“姓名”和“年齡”。在輸出的V_NAME變量?jī)?nèi)容前分別增加提示語(yǔ)“所查找的職工姓名為:”和“所查找的職工年齡為:”。DECLAREV_NAMESCH_FACTORY.STAFF%ROWTYPE;BEGINSELECT*INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE職工號(hào)=3001;PRINT('所查找的職工姓名為:'||V_NAME.姓名);PRINT('所查找的職工年齡為:'||V_NAME.年齡);END;/6.1.2記錄類型記錄類型是由單行多列的標(biāo)量類型構(gòu)成復(fù)合類型,類似于C語(yǔ)言中的結(jié)構(gòu)。記錄類型提供了處理獨(dú)立但又作為一個(gè)整體單元的相關(guān)變量的一種機(jī)制。定義記錄類型的語(yǔ)法如下所示:TYPE<記錄類型名>ISRECORD(<字段名><數(shù)據(jù)類型>[<default子句>]{,<字段名><數(shù)據(jù)類型>[<default子句>]});6.1.2記錄類型default子句的相關(guān)說(shuō)明如下所示:<default子句>::=<default子句1>|<default子句2><default子句1>::=DEFAULT<缺省值><default子句2>::=:=<缺省值>通過(guò)將需要操作的表結(jié)構(gòu)定義成一個(gè)記錄,可以方便地對(duì)表中的行數(shù)據(jù)進(jìn)行操作。在DMSQL程序中使用記錄,需要先定義一個(gè)RECORD類型,再用該類型聲明變量,可以單獨(dú)對(duì)記錄中的字段賦值,使用點(diǎn)標(biāo)記引用一個(gè)記錄中的字段(記錄名.字段名)6.1.2記錄類型【案例6-3】定義一個(gè)記錄類型r_staff,包含name和age兩個(gè)字段,字段類型分別對(duì)應(yīng)SCH_FACTORY模式中的STAFF表中的“姓名”和“年齡”兩個(gè)字段。聲明一個(gè)該記錄類型的變量v_staff,使用點(diǎn)標(biāo)記為v_staff的兩個(gè)字段賦值,然后使用v_staff更新STAFF表的姓名為“張童”的年齡為28。6.1.2記錄類型DECLARETYPEr_staffISRECORD(nameSCH_FACTORY.STAFF.姓名%TYPE,ageSCH_FACTORY.STAFF.年齡%TYPE);v_staffr_staff;BEGIN v_:='張童'; v_staff.age:=28; UPDATESCH_FACTORY.STAFFSET年齡=v_staff.ageWHERE姓名=v_; COMMIT;END;/6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型2、動(dòng)態(tài)數(shù)組類型6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型靜態(tài)數(shù)組是在聲明時(shí)就已經(jīng)確定了數(shù)組大小的數(shù)組,其長(zhǎng)度是預(yù)先定義好的,在整個(gè)程序中,一旦給定大小后就無(wú)法改變。定義靜態(tài)數(shù)組類型的語(yǔ)法圖如圖所示:6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型定義了靜態(tài)數(shù)組類型后需要用這個(gè)類型申明一個(gè)數(shù)組變量然后進(jìn)行操作。理論上DM支持靜態(tài)數(shù)組的每一個(gè)維度的最大長(zhǎng)度為65534,但是靜態(tài)數(shù)組最大長(zhǎng)度同時(shí)受系統(tǒng)內(nèi)部堆棧空間大小的限制,如果超出堆棧的空間限制,系統(tǒng)會(huì)報(bào)錯(cuò)。6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型DECLARE

TYPEArrISARRAYVARCHAR[3]; --TYPE定義一維數(shù)組類型

AArr;

--聲明一維數(shù)組

TYPEArr1ISARRAYVARCHAR[2,4]; --TYPE定義二維數(shù)組類型

BArr1; --聲明二維數(shù)組BEGIN

......END;/6.1.3數(shù)組類型2、動(dòng)態(tài)數(shù)組類型與靜態(tài)數(shù)組不同,動(dòng)態(tài)數(shù)組可以隨程序需要而重新指定大小,其內(nèi)存空間是從堆(HEAP)上分配(即動(dòng)態(tài)分配)的,通過(guò)執(zhí)行代碼而為其分配存儲(chǔ)空間,并由DM自動(dòng)釋放內(nèi)存。動(dòng)態(tài)數(shù)組與靜態(tài)數(shù)組的定義方法類似,區(qū)別只在于動(dòng)態(tài)數(shù)組沒(méi)有指定下標(biāo),需要?jiǎng)討B(tài)分配空間。定義動(dòng)態(tài)數(shù)組類型的語(yǔ)法圖如圖所示:6.1.3數(shù)組類型2、動(dòng)態(tài)數(shù)組類型定義了動(dòng)態(tài)數(shù)組類型后需要用這個(gè)類型申明一個(gè)數(shù)組變量,之后在DMSQL程序的執(zhí)行部分需要為這個(gè)數(shù)組變量動(dòng)態(tài)分配空間。動(dòng)態(tài)分配空間語(yǔ)法如下所示:數(shù)組變量名:=NEW數(shù)據(jù)類型[常量表達(dá)式,…];數(shù)組變量名:=NEW數(shù)據(jù)類型[常量表達(dá)式][];--對(duì)多維數(shù)組的某一維度進(jìn)行空間分配6.1.3數(shù)組類型2、動(dòng)態(tài)數(shù)組類型【案例6-4】使用動(dòng)態(tài)數(shù)組打印4的1倍、2倍、3倍、4倍的數(shù)字。DECLARETYPEArrISARRAYVARCHAR[];aArr;BEGINa:=NEWVARCHAR[4];--動(dòng)態(tài)分配空間FORIIN1..4LOOPa[I]:=I*4;PRINTa[I];ENDLOOP;END;/6.1.4集合類型1、VARRAY類型2、索引表類型3、嵌套表類型6.1.4集合類型1、VARRAY類型VARRAY是一種具有可伸縮性的數(shù)組,數(shù)組中的每個(gè)元素具有相同的數(shù)據(jù)類型。VARRAY在定義時(shí)由用戶指定一個(gè)最大容量,其元素索引是從1開(kāi)始的有序數(shù)字。定義VARRAY的語(yǔ)法格式如下所示:TYPE<數(shù)組名>ISVARRAY(<常量表達(dá)式>)OF<數(shù)據(jù)類型>;6.1.4集合類型1、VARRAY類型在定義了一個(gè)VARRAY數(shù)組類型后,再聲明一個(gè)該數(shù)組類型的變量,就可以對(duì)這個(gè)數(shù)組變量進(jìn)行操作了。如下面的代碼片段所示:TYPEmy_array_typeISVARRAY(10)OFINTEGER;vMY_ARRAY_TYPE;6.1.4集合類型2、索引表類型索引表提供了一種快速、方便地管理一組相關(guān)數(shù)據(jù)的方法。索引表是一組數(shù)據(jù)的集合,它將數(shù)據(jù)按照一定規(guī)則組織起來(lái),形成一個(gè)可操作的整體,是對(duì)大量數(shù)據(jù)進(jìn)行有效組織和管理的手段之一,通過(guò)函數(shù)可以對(duì)大量性質(zhì)相同的數(shù)據(jù)進(jìn)行存儲(chǔ)、排序、插入及刪除等操作,從而可以有效地提高程序開(kāi)發(fā)效率及改善程序的編寫(xiě)方式。索引表不需要用戶指定大小,其大小根據(jù)用戶的操作自動(dòng)增長(zhǎng)。定義索引表的語(yǔ)法格式如下所示:TYPE<索引表名>ISTABLEOF<數(shù)據(jù)類型>INDEXBY<索引數(shù)據(jù)類型>;6.1.4集合類型2、索引表類型【案例6-5】定義數(shù)據(jù)類型為VARCHAR,索引類型為INT的索引表。然后使用該索引表記錄1號(hào)元素為’TEST1’,2號(hào)元素為’TEST2’,3號(hào)元素為1號(hào)元素和2號(hào)元素的組合,最后打印3號(hào)元素。6.1.4集合類型2、索引表類型DECLARE

TYPEArrISTABLEOFVARCHAR(100)INDEXBYINT;

xArr;BEGIN

x(1):='TEST1';

x(2):='TEST2';

x(3):=x(1)||x(2);PRINTx(3);END;/6.1.4集合類型3、嵌套表類型嵌套表類似于一維數(shù)組,但與數(shù)組不同的是,嵌套表不需要指定元素的個(gè)數(shù),其大小可自動(dòng)擴(kuò)展。嵌套表元素的下標(biāo)從1開(kāi)始。定義嵌套表的語(yǔ)法格式如下所示:TYPE<嵌套表名>ISTABLEOF<元素?cái)?shù)據(jù)類型>;6.1.4集合類型3、嵌套表類型【案例6-6】定義一個(gè)嵌套表,其結(jié)構(gòu)與SCH_FACTORY.STAFF表相同,用來(lái)存放部門號(hào)為100001職工的信息。然后打印第1個(gè)元素的“姓名”。6.1.4集合類型3、嵌套表類型DECLARE TYPEInfo_tISTABLEOFSCH_FACTORY.STAFF%ROWTYPE; infoInfo_t;BEGIN SELECT職工號(hào),姓名,性別,年齡,電話號(hào)碼,籍貫,部門號(hào)BULKCOLLECTINTOinfoFROMSCH_FACTORY.STAFFWHERE部門號(hào)=100001; PRINT(info(1).姓名);END;/6.1.5操作符1、算術(shù)操作符2、關(guān)系操作符3、比較操作符4、邏輯操作符6.1.5操作符1、算術(shù)操作符操作符對(duì)應(yīng)操作+加-減*乘/除6.1.5操作符2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論