




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第10講PL/SQL的基本語法Oracle本節(jié)重點(diǎn)
1.PLSQL語法簡介2.PLSQL基本語法PL/SQL(ProcedualLanguage/SQL)PL/SQL也是一種程序語言,被叫做支持SQL的程序語言。PL/SQL是Oracle數(shù)據(jù)庫獨(dú)有的一種程序語言,是Oracle數(shù)據(jù)庫對(duì)SQL語句的擴(kuò)展是把數(shù)據(jù)操作和查詢語句組織在PL/SQL代碼的過程性單元中,通過邏輯判斷,循環(huán)等操作實(shí)現(xiàn)復(fù)雜的功能或者計(jì)算的程序語言。使用PL/SQL的原因1.提高應(yīng)用程序的運(yùn)行性能2.提供了模塊化的應(yīng)用程序設(shè)計(jì)功能3.允許定義標(biāo)識(shí)符4.具有過程語言控制結(jié)構(gòu)5.具有良好的兼容性6.處理運(yùn)行錯(cuò)誤使用PL/SQL的原因1.提高應(yīng)用程序的運(yùn)行性能當(dāng)應(yīng)用程序訪問RDBMS(RelationalDatabaseManagementSystem)時(shí),每次只能發(fā)送單條SQL語句,如圖:執(zhí)行四條SQL語句需要在網(wǎng)絡(luò)上發(fā)送四次語句。而對(duì)于Oracle數(shù)據(jù)庫來說,通過使用PL/SQL塊,可以將多條SQL語句組織到一個(gè)PL/SQL塊中,從而降低了網(wǎng)絡(luò)開銷,提高了應(yīng)用程序的性能。使用PL/SQL的原因通過使用PL/SQL塊,在網(wǎng)絡(luò)上只需要發(fā)送一次PL/SQL塊,就可以完成所有SQL語句的發(fā)送和數(shù)據(jù)處理工作,減少了網(wǎng)絡(luò)傳輸。如圖所示:使用PL/SQL的原因二、提高了模塊化的程序設(shè)計(jì)功能當(dāng)開發(fā)數(shù)據(jù)庫應(yīng)用程序時(shí),為了簡化客戶端應(yīng)用程序的開發(fā)和維護(hù),首先將企業(yè)規(guī)則或業(yè)務(wù)邏輯集成在PL/SQL子程序(過程、函數(shù)、包)中,然后在應(yīng)用程序中調(diào)用子程序?qū)崿F(xiàn)相應(yīng)的應(yīng)用的程序功能。例如:CREATEFUNCTIONget_sal(noNUMBER)RETURNNUMBERIS salaryNUMBERE(6,2);BEGIN SELECTsalINTOsalaryFROMemp WHEREemp_no=no; RETURNsalary;END;當(dāng)開發(fā)了該函數(shù)之后,應(yīng)用程序可以直接調(diào)用該函數(shù),返回特定的雇員工資,而不需要編寫其他程序代碼。使用PL/SQL的原因三、允許定義標(biāo)識(shí)符當(dāng)使用PL/SQL開發(fā)應(yīng)用模塊時(shí),為了使得應(yīng)用模塊與應(yīng)用環(huán)境實(shí)現(xiàn)數(shù)據(jù)交互,需要定義變量、常量、游標(biāo)和例外等各種標(biāo)識(shí)符。使用PL/SQL的原因四、具有過程語言控制結(jié)構(gòu)PL/SQL是Oracle在標(biāo)準(zhǔn)SQL上的過程性擴(kuò)展,它不久允許在PL/SQL塊內(nèi)嵌入SQL語句,而且允許在PL/SQL塊中使用各種類型的條件分支語句和循環(huán)語句。使用PL/SQL的原因五、具有良好的兼容性PL/SQL是Oracle提供的用于實(shí)現(xiàn)應(yīng)用模塊的語言,在允許運(yùn)行Oracle的任何平臺(tái)中都可以使用PL/SQL。PL/SQL程序的基本結(jié)構(gòu)塊是PL/SQL中最基本執(zhí)行單元。PL/SQL塊由四個(gè)基本部分組成:聲明、執(zhí)行體開始、異常處理、執(zhí)行體結(jié)束。DECLARE–可選部分 變量、常量、游標(biāo)、用戶定義異常的聲明BEGIN–必要部分 SQL語句和PL/SQL語句構(gòu)成的執(zhí)行程序EXCEPTION–可選部分 程序出現(xiàn)異常時(shí),捕獲異常并處理異常END;-必要部分。聲明執(zhí)行體開始例外部分執(zhí)行體結(jié)束PL/SQL程序的基本結(jié)構(gòu)示例一:只包含執(zhí)行部分的PL/SQL塊BEGIN dbms_output.put_line(‘Hello,everyone’);END;dbms_output是Oracle所提供的系統(tǒng)包put_line是該包所包含的過程,用于輸出字符串信息。PL/SQL程序的基本結(jié)構(gòu)示例二:包含定義部分和執(zhí)行DECLARE v_enameVARCHAR2(5);BEGIN SELECTemployee_idINTOv_enameFROM EMPLOYEES WHEREemployee_id=&no; dbms_output.put_line('雇員名:'||v_ename);END;PL/SQL變量的定義identifier[CONSTANT]datatype[NOTNULL][:=expr]identifier標(biāo)識(shí)符最多30個(gè)字符加入CONSTANT表示為常量NOTNULL表示不允許為空:=可以為變量賦初值例如:declare v_agenumber(3):=26;--長度為3,初始值為26begin dbms_output.put_line(v_age);end;在編寫PL/SQL程序時(shí),為了臨時(shí)存儲(chǔ)數(shù)值,必須定義變量。所有變量必須在declare中聲明,程序中不允許聲明。PL/SQL變量的定義PL/SQL變量——數(shù)據(jù)類型數(shù)值:INTEGER,FLOAT,NUMBER,...字符:CHAR,VARCHAR,VARCHAR2,STRING日期:DATE,TIMESTAMP,INTEVALYEARTOMONTH,...邏輯:BOOLEAN組合量:RECODE,INDEXBYTABLE,...簡單類型復(fù)合類型PL/SQL表達(dá)式關(guān)于PL/SQL表達(dá)式,包含以下內(nèi)容:賦值表達(dá)式串聯(lián)運(yùn)算符PL/SQL表達(dá)式-賦值表達(dá)式語法:variable:=expression/value(變量:=表達(dá)式/值)作用:
為變量賦值 一般書寫在語句部分PL/SQL表達(dá)式-串聯(lián)(連接)表達(dá)式語法:||作用:用來連接多個(gè)值 一般書寫在語句部分PL/SQL流程控制19流程控制循環(huán)forwhileloop選擇ifelsifelseifelseifif判斷20IF
布爾表達(dá)式THEN
執(zhí)行語句ENDIF;DECLAREnumber1integer:=80;number2integer:=90;BEGIN
ifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
endif;END;ifelse判斷21IF
布爾表達(dá)式THEN
執(zhí)行語句;ELSE
執(zhí)行語句;ENDIF;DECLAREnumber1integer:=800;number2integer:=90;BEGINifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
elsedbms_output.put_line(number1||'>'||number2);endif;END;ifelsifelse判斷22IF
布爾表達(dá)式THEN
執(zhí)行語句;ELSIF布爾表達(dá)式THEN
執(zhí)行語句;ELSE
執(zhí)行語句;ENDIF;DECLAREnumber1integer:=800;number2integer:=90;BEGIN
ifnumber1<number2thendbms_output.put_line(number1||'<'||number2);
elsifnumber1>number2thendbms_output.put_line(number1||'>'||number2);elsedbms_output.put_line(number1||'='||number2);endif;END;loop簡單循環(huán)23loop
循環(huán)語句段:
if條件語句then exit; else
退出循環(huán)的處理語句段; endif;endloop;exit是退出循環(huán),而不是退出整個(gè)代碼塊循環(huán)一:loop…exit…end…loop;loop簡單循環(huán)24任務(wù)一:當(dāng)兩個(gè)數(shù)相等時(shí)跳出循環(huán)DECLAREnumber1integer:=80;number2integer:=90;BEGIN
loop number1:=number1+1;
ifnumber1=number2then
exit;
else dbms_output.put_line(number1);
endif;
endloop;END;loop簡單循環(huán)25LOOP要執(zhí)行的語句;
EXITWHEN<條件語句>/*條件滿足,退出循環(huán)語句*/ENDLOOP;循環(huán)二:loop…exit…when…end…loop;注意:exitwhen實(shí)際上就相當(dāng)于If條件thenexit;endif;loop簡單循環(huán)26任務(wù)二:當(dāng)兩個(gè)數(shù)相等時(shí)跳出循環(huán)DECLAREnumber1integer:=80;number2integer:=90;BEGIN
loop number1:=number1+1; dbms_output.put_line(number1);exitwhennumber1=number2;
endloop;END;while循環(huán)27WHILE
<布爾表達(dá)式>
LOOP
要執(zhí)行的語句;
ENDLOOP;
循環(huán)三:while…loop…endloopwhile循環(huán)28任務(wù)三:DECLAREnumber1integer:=80;number2integer:=90;BEGINwhilenumber1<number2loopnumber1:=number1+1;dbms_output.put_line(number1);
endloop;END;while循環(huán)29任務(wù)三:用循環(huán)寫出從1+2+3…+100for循環(huán)30FOR
循環(huán)計(jì)數(shù)器IN[REVERSE]
下限..上限
LOOP
要執(zhí)行的語句;
ENDLOOP;每循環(huán)一次,循環(huán)變量自動(dòng)加1;使用關(guān)鍵字REVERSE,循環(huán)變量自動(dòng)減1。跟在INREVERSE后面的數(shù)字必須是從小到大的順序,而且必須是整數(shù),不能是變量或表達(dá)式??梢允褂肊XIT退出循環(huán)。循環(huán)四:for…in…loop…endfor循環(huán)31任務(wù)四:用循環(huán)寫出從1+2+3…+100declaresum1integer:=0;number1integer:=1;begin
fornumber1in1..100loop
sum1:=sum1+number1;
endloop;dbms_output.put_line(sum1);end;下線..上線數(shù)據(jù)庫賦值數(shù)據(jù)庫賦值是通過SELECT語句來完成的,每次執(zhí)行SELECT語句就賦值一次,一般要求被賦值的變量與SELECT中的列名要一一對(duì)應(yīng)例子:DECLARE
empnonumber(3):=101;
empnamevarchar2(30);
salnumber(8,2);BEGIN
SELECTfirst_name||last_name,salary
INTOempname,sal
FROMhr.employeesWHEREemployee_id=empno; dbms_output.put_line(empname||'---'||sal);END;注釋單行注釋 --我是單行注釋多行注釋/*我是多行注釋*/復(fù)合類型與簡單類型不同,復(fù)合變量類型不是數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)類型,所以復(fù)合變量在聲明類型之前,首先要?jiǎng)?chuàng)建使用到的復(fù)合類型,然后將變量聲明為復(fù)合類型。PL/SQLTABLES:表類型PL/SQLRECORDS:記錄類型記錄類型recordTYPE
記錄類型名
ISRECORD(
Field1type1[NOTNULL][:=exp1], Field2type2[NOTNULL][:=exp2], ... Fieldntypen[NOTNULL][:=expn]
);解釋:record類型變量聲明時(shí)可以為null,但必須賦初始值,引用記錄型變量的方法是“記錄變量名.基本類型變量名”記錄是由一組相關(guān)的記錄成員(Field)組成的.記錄類型recordDECLARETYPEmy_recodeISRECORD(
empnovarchar2(20):='100', empnamevarchar2(20));srecodemy_recode;BEGINdbms_output.put_line(srecode.empno);END;數(shù)據(jù)類型變量名表類型變量tableTYPE
表類型ISTABLEOF
類型
INDEXBYBINARY_INTEGER;表變量名表類型;indexbybinary_integer子句代表以符號(hào)整數(shù)為索引,這樣訪問表類型變量中的數(shù)據(jù)方法就是“表變量名(索引符號(hào)整數(shù))”包括兩個(gè)基本成分:數(shù)據(jù)處理類型為BINARY_INTEGER主鍵;標(biāo)量或記錄數(shù)據(jù)類型的列.表類型變量tableDECLARETYPEmy_tableISTABLEofvarchar2(20)indexbybinary_integer;TYPEmy_table1ISTABLEofvarchar2(20)indexbybinary_integer;table1my_table;table2my_table1;BEGINtable1(1):='xiaowang';table1(2):='xiaowang1';table1(3):='xiaowang2';table2(1):=table1(1);table2(2):=table1(2);table2(3):=table1(3);dbms_output.put_line(table2(1));dbms_output.put_line(table2(2));dbms_output.put_line(table2(3));END;Table與高級(jí)語言中的數(shù)組的區(qū)別PL/SQL中的表沒有固定邊界,下表可以為負(fù)數(shù)數(shù)組有固定大小,且下標(biāo)必須大于0通過%TYPE聲明變量定義一個(gè)變量,其數(shù)據(jù)類型與已經(jīng)定義的某個(gè)數(shù)據(jù)變量的類型相同,或者與數(shù)據(jù)庫表的某個(gè)列的數(shù)據(jù)類型相同,這時(shí)可以使用%TYPE%TYPE使用場(chǎng)合使用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)士護(hù)理業(yè)務(wù)查房:提升技能與優(yōu)化護(hù)理實(shí)踐
- 四川應(yīng)用技術(shù)職業(yè)學(xué)院《開發(fā)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省宜興市丁蜀區(qū)重點(diǎn)名校2024-2025學(xué)年初三下學(xué)期3月10日周中測(cè)數(shù)學(xué)試題試卷含解析
- 云南師范大學(xué)《產(chǎn)品U界面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江省龍游第二高級(jí)中學(xué)2025屆高三一輪第五次階段性過關(guān)物理試題試卷含解析
- 浙江宇翔職業(yè)技術(shù)學(xué)院《金融綜合實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西林業(yè)職業(yè)技術(shù)學(xué)院《冶金資源工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南醫(yī)藥健康職業(yè)學(xué)院《寄生蟲學(xué)及檢驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國科學(xué)技術(shù)大學(xué)《運(yùn)動(dòng)技能學(xué)習(xí)與控制》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)江師范學(xué)院《工程軟件應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆上海市奉賢區(qū)高三語文二模試卷作文題目解析及范文:達(dá)克效應(yīng)
- 2024年新瓦斯檢查工國家考試題庫
- (一模)桂林市、來賓市2025屆高考第一次跨市聯(lián)合模擬考試地理試卷(含答案詳解)
- 2025-2030“一帶一路”之菲律賓礦業(yè)行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資前景預(yù)測(cè)研究報(bào)告
- 飾品干貨知識(shí)培訓(xùn)課件
- 2024-2030年中國高純銅行業(yè)發(fā)展監(jiān)測(cè)及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030中國國防車輛行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年03月荊門市“招碩引博”1412人筆試歷年參考題庫考點(diǎn)剖析附解題思路及答案詳解
- “育人為本,德育為先”在學(xué)校人才培養(yǎng)方案中的具體體現(xiàn)
- 獸醫(yī)病理學(xué)基礎(chǔ)試題及答案
- 電力電纜及通道檢修規(guī)程QGDW 11262-2014(文字版)
評(píng)論
0/150
提交評(píng)論