版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫基礎(chǔ)(基于達夢DM8)數(shù)據(jù)庫程序設(shè)計66.1掌握數(shù)據(jù)類型和操作符0102記錄類型%TYPE和%ROWTYPE03數(shù)組類型04集合類型05操作符6.1.1%TYPE和%ROWTYPE
在許多時候,DMSQL程序變量被用來處理存儲在數(shù)據(jù)庫表中的數(shù)據(jù)。這種情況下,變量應(yīng)該擁有與表列相同的類型。如果用戶應(yīng)用中有很多的變量以及DMSQL程序代碼,這種處理可能是十分耗時和容易出錯的。為了解決上述問題,DMSQL程序提供了%TYPE數(shù)據(jù)類型和%ROWTYPE數(shù)據(jù)類型。%TYPE可以將變量同表列的類型進行綁定。與%TYPE類似,%ROWTYPE將返回一個基于表定義的運算類型,它將一個記錄聲明為具有相同類型的數(shù)據(jù)庫行。在DMSQL程序設(shè)計中使用%TYPE和%ROWTYPE是一種非常好的編程風(fēng)格,它使得DMSQL程序更加靈活,更適應(yīng)于對數(shù)據(jù)庫的處理。6.1.1%TYPE和%ROWTYPE
定義%TYPE變量的語法片段:DECLAREV_NAMET.NAME%TYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE
【案例6-1】設(shè)置一個與職工表姓名字段類型一致的變量V_NAME,將職工號3001職工的姓名記錄在V_NAME中并輸出。在輸出的V_NAME變量內(nèi)容前增加提示語“所查找的職工姓名為:”。DECLARE
V_NAMESCH_FACTORY.STAFF.姓名%TYPE;BEGIN
SELECT姓名INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE職工號=3001;
PRINT('所查找的職工姓名為:'||V_NAME);END;/6.1.1%TYPE和%ROWTYPE
定義%ROWTYPE變量的語法片段:DECLAREV_TRECT%ROWTYPE;BEGIN......END;/6.1.1%TYPE和%ROWTYPE
【案例6-2】設(shè)置一個與職工表數(shù)據(jù)行字段類型一致的變量V_NAME,將職工號3001職工的信息記錄在V_NAME中并輸出其“姓名”和“年齡”。在輸出的V_NAME變量內(nèi)容前分別增加提示語“所查找的職工姓名為:”和“所查找的職工年齡為:”。DECLAREV_NAMESCH_FACTORY.STAFF%ROWTYPE;BEGINSELECT*INTOV_NAMEFROMSCH_FACTORY.STAFFWHERE職工號=3001;PRINT('所查找的職工姓名為:'||V_NAME.姓名);PRINT('所查找的職工年齡為:'||V_NAME.年齡);END;/6.1.2記錄類型記錄類型是由單行多列的標(biāo)量類型構(gòu)成復(fù)合類型,類似于C語言中的結(jié)構(gòu)。記錄類型提供了處理獨立但又作為一個整體單元的相關(guān)變量的一種機制。定義記錄類型的語法如下所示:TYPE<記錄類型名>ISRECORD(<字段名><數(shù)據(jù)類型>[<default子句>]{,<字段名><數(shù)據(jù)類型>[<default子句>]});6.1.2記錄類型default子句的相關(guān)說明如下所示:<default子句>::=<default子句1>|<default子句2><default子句1>::=DEFAULT<缺省值><default子句2>::=:=<缺省值>通過將需要操作的表結(jié)構(gòu)定義成一個記錄,可以方便地對表中的行數(shù)據(jù)進行操作。在DMSQL程序中使用記錄,需要先定義一個RECORD類型,再用該類型聲明變量,可以單獨對記錄中的字段賦值,使用點標(biāo)記引用一個記錄中的字段(記錄名.字段名)6.1.2記錄類型【案例6-3】定義一個記錄類型r_staff,包含name和age兩個字段,字段類型分別對應(yīng)SCH_FACTORY模式中的STAFF表中的“姓名”和“年齡”兩個字段。聲明一個該記錄類型的變量v_staff,使用點標(biāo)記為v_staff的兩個字段賦值,然后使用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、動態(tài)數(shù)組類型6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型靜態(tài)數(shù)組是在聲明時就已經(jīng)確定了數(shù)組大小的數(shù)組,其長度是預(yù)先定義好的,在整個程序中,一旦給定大小后就無法改變。定義靜態(tài)數(shù)組類型的語法圖如圖所示:6.1.3數(shù)組類型1、靜態(tài)數(shù)組類型定義了靜態(tài)數(shù)組類型后需要用這個類型申明一個數(shù)組變量然后進行操作。理論上DM支持靜態(tài)數(shù)組的每一個維度的最大長度為65534,但是靜態(tài)數(shù)組最大長度同時受系統(tǒng)內(nèi)部堆??臻g大小的限制,如果超出堆棧的空間限制,系統(tǒng)會報錯。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、動態(tài)數(shù)組類型與靜態(tài)數(shù)組不同,動態(tài)數(shù)組可以隨程序需要而重新指定大小,其內(nèi)存空間是從堆(HEAP)上分配(即動態(tài)分配)的,通過執(zhí)行代碼而為其分配存儲空間,并由DM自動釋放內(nèi)存。動態(tài)數(shù)組與靜態(tài)數(shù)組的定義方法類似,區(qū)別只在于動態(tài)數(shù)組沒有指定下標(biāo),需要動態(tài)分配空間。定義動態(tài)數(shù)組類型的語法圖如圖所示:6.1.3數(shù)組類型2、動態(tài)數(shù)組類型定義了動態(tài)數(shù)組類型后需要用這個類型申明一個數(shù)組變量,之后在DMSQL程序的執(zhí)行部分需要為這個數(shù)組變量動態(tài)分配空間。動態(tài)分配空間語法如下所示:數(shù)組變量名:=NEW數(shù)據(jù)類型[常量表達式,…];數(shù)組變量名:=NEW數(shù)據(jù)類型[常量表達式][];--對多維數(shù)組的某一維度進行空間分配6.1.3數(shù)組類型2、動態(tài)數(shù)組類型【案例6-4】使用動態(tài)數(shù)組打印4的1倍、2倍、3倍、4倍的數(shù)字。DECLARETYPEArrISARRAYVARCHAR[];aArr;BEGINa:=NEWVARCHAR[4];--動態(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ù)組中的每個元素具有相同的數(shù)據(jù)類型。VARRAY在定義時由用戶指定一個最大容量,其元素索引是從1開始的有序數(shù)字。定義VARRAY的語法格式如下所示:TYPE<數(shù)組名>ISVARRAY(<常量表達式>)OF<數(shù)據(jù)類型>;6.1.4集合類型1、VARRAY類型在定義了一個VARRAY數(shù)組類型后,再聲明一個該數(shù)組類型的變量,就可以對這個數(shù)組變量進行操作了。如下面的代碼片段所示:TYPEmy_array_typeISVARRAY(10)OFINTEGER;vMY_ARRAY_TYPE;6.1.4集合類型2、索引表類型索引表提供了一種快速、方便地管理一組相關(guān)數(shù)據(jù)的方法。索引表是一組數(shù)據(jù)的集合,它將數(shù)據(jù)按照一定規(guī)則組織起來,形成一個可操作的整體,是對大量數(shù)據(jù)進行有效組織和管理的手段之一,通過函數(shù)可以對大量性質(zhì)相同的數(shù)據(jù)進行存儲、排序、插入及刪除等操作,從而可以有效地提高程序開發(fā)效率及改善程序的編寫方式。索引表不需要用戶指定大小,其大小根據(jù)用戶的操作自動增長。定義索引表的語法格式如下所示:TYPE<索引表名>ISTABLEOF<數(shù)據(jù)類型>INDEXBY<索引數(shù)據(jù)類型>;6.1.4集合類型2、索引表類型【案例6-5】定義數(shù)據(jù)類型為VARCHAR,索引類型為INT的索引表。然后使用該索引表記錄1號元素為’TEST1’,2號元素為’TEST2’,3號元素為1號元素和2號元素的組合,最后打印3號元素。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ù)組不同的是,嵌套表不需要指定元素的個數(shù),其大小可自動擴展。嵌套表元素的下標(biāo)從1開始。定義嵌套表的語法格式如下所示:TYPE<嵌套表名>ISTABLEOF<元素數(shù)據(jù)類型>;6.1.4集合類型3、嵌套表類型【案例6-6】定義一個嵌套表,其結(jié)構(gòu)與SCH_FACTORY.STAFF表相同,用來存放部門號為100001職工的信息。然后打印第1個元素的“姓名”。6.1.4集合類型3、嵌套表類型DECLARE TYPEInfo_tISTABLEOFSCH_FACTORY.STAFF%ROWTYPE; infoInfo_t;BEGIN SELECT職工號,姓名,性別,年齡,電話號碼,籍貫,部門號BULKCOLLECTINTOinfoFROMSCH_FACTORY.STAFFWHERE部門號=100001; PRINT(info(1).姓名);END;/6.1.5操作符1、算術(shù)操作符2、關(guān)系操作符3、比較操作符4、邏輯操作符6.1.5操作符1、算術(shù)操作符操作符對應(yīng)操作+加-減*乘/除6.1.5操作符2
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班干部的培養(yǎng)與管理計劃
- 病歷室護士細致記錄病史
- 物流運輸行業(yè)美工工作經(jīng)驗分享
- 《慢性病危險因素》課件
- 家政公司前臺服務(wù)總結(jié)
- 《康復(fù)治療學(xué)總論》課件
- 2024年全球及中國混合云行業(yè)概述及特征調(diào)研報告
- 2021年廣東省惠州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年河南省鄭州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2023年安徽省銅陵市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2023年廣東羅浮山旅游集團有限公司招聘筆試題庫及答案解析
- 《社會主義核心價值觀》優(yōu)秀課件
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 《妊娠期糖尿病患者個案護理體會(論文)3500字》
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學(xué)
- 《小學(xué)生錯別字原因及對策研究(論文)》
- 便攜式氣體檢測報警儀管理制度
- 酒店安全的管理制度
- (大潔王)化學(xué)品安全技術(shù)說明書
- 2022年科學(xué)道德與學(xué)術(shù)規(guī)范知識競賽決賽題庫(含答案)
- 市場調(diào)查與預(yù)測期末復(fù)習(xí)試題10套含答案
評論
0/150
提交評論