版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)庫開發(fā)技術(shù)數(shù)據(jù)庫開發(fā)技術(shù)第第1010章章 2 PL/SQL: 2 PL/SQL: 控制結(jié)構(gòu)和嵌入式控制結(jié)構(gòu)和嵌入式SQLSQL數(shù)據(jù)庫開發(fā)技術(shù)FJUT學(xué)習(xí)學(xué)習(xí)PL/SQLPL/SQL中控制結(jié)構(gòu)的用途和類型中控制結(jié)構(gòu)的用途和類型 識(shí)別并構(gòu)造不同的循環(huán)語句識(shí)別并構(gòu)造不同的循環(huán)語句 使用嵌套循環(huán)和標(biāo)簽控制塊的流程使用嵌套循環(huán)和標(biāo)簽控制塊的流程在在PL/SQLPL/SQL中嵌入中嵌入SQLSQL的的SELECTSELECT語句語句 動(dòng)態(tài)聲明一個(gè)動(dòng)態(tài)聲明一個(gè)PL/SQLPL/SQL變量的數(shù)據(jù)類型和長度變量的數(shù)據(jù)類型和長度 在在PL/SQL PL/SQL 中嵌入中嵌入SQLSQL的的DML DML 語句
2、語句本章要點(diǎn)數(shù)據(jù)庫開發(fā)技術(shù)FJUT控制結(jié)構(gòu)控制結(jié)構(gòu)在過程式語言中,包括三種基本的編程控制結(jié)構(gòu):在過程式語言中,包括三種基本的編程控制結(jié)構(gòu):1.順序結(jié)構(gòu)順序結(jié)構(gòu)從開始到結(jié)束以線性次序執(zhí)行一系列指令,不會(huì)跳從開始到結(jié)束以線性次序執(zhí)行一系列指令,不會(huì)跳過任何一條指令,也不會(huì)重復(fù)任何一條指令。過任何一條指令,也不會(huì)重復(fù)任何一條指令。2.選擇結(jié)構(gòu),也稱為決策結(jié)構(gòu)、分支結(jié)構(gòu)或選擇結(jié)構(gòu),也稱為決策結(jié)構(gòu)、分支結(jié)構(gòu)或IF結(jié)構(gòu)結(jié)構(gòu)根據(jù)條件的結(jié)果,執(zhí)行一種選擇,跳過其他選擇。根據(jù)條件的結(jié)果,執(zhí)行一種選擇,跳過其他選擇。3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行一系列指令。重復(fù)執(zhí)行一系列指令。使用一些控制結(jié)構(gòu)可以改變使用一些控制結(jié)
3、構(gòu)可以改變PL/SQL塊中語句的邏輯塊中語句的邏輯流程。流程。數(shù)據(jù)庫開發(fā)技術(shù)FJUT選擇結(jié)構(gòu)PL/SQL中有三種選擇或條件語句中有三種選擇或條件語句PL/SQL 中的中的IF 語句的結(jié)構(gòu)和其它語言中的語句的結(jié)構(gòu)和其它語言中的IF 語句結(jié)構(gòu)類似,語句結(jié)構(gòu)類似,PL/SQL依據(jù)條件有選擇地執(zhí)行依據(jù)條件有選擇地執(zhí)行相應(yīng)動(dòng)作。相應(yīng)動(dòng)作。IF 語句的三種形式語句的三種形式:IFTHENEND IFIFTHENELSEEND IFIFTHENELSIFEND IF數(shù)據(jù)庫開發(fā)技術(shù)FJUTIF 語句IF v_ename = OSBORNE THEN v_mgr := 22;END IF; IF conditi
4、on THEN statements;ELSIF condition THEN statements;ELSE statements;END IF; 數(shù)據(jù)庫開發(fā)技術(shù)FJUT簡單的簡單的IF語句語句舉例:舉例:為為last name 是是Miller的員工設(shè)定新信息:工作是的員工設(shè)定新信息:工作是 Salesman ;所在部門是;所在部門是35;傭金是當(dāng)前工資的;傭金是當(dāng)前工資的20%。. . .IF v_ename = MILLER THEN v_job := SALESMAN; v_deptno := 35; v_new_comm := sal * 0.20; END IF;. . .數(shù)據(jù)庫
5、開發(fā)技術(shù)FJUTIF-THEN-ELSE 語句執(zhí)行流程數(shù)據(jù)庫開發(fā)技術(shù)FJUTIF-THEN-ELSE 語句舉例:舉例:如果預(yù)定日期與裝運(yùn)日期相差少于如果預(yù)定日期與裝運(yùn)日期相差少于5天,則將天,則將v_ship_flag 設(shè)為設(shè)為Acceptable.IF v_shipdate - v_orderdate 100 THEN v_start := 2 * v_start;ELSIF v_start = 50 THEN v_start := .5 * v_start;ELSE v_start := .1 * v_start;END IF;. . . 如果可能,盡量用如果可能,盡量用ELSIF 子句代
6、替嵌套的子句代替嵌套的IF 語句,這樣代碼更清語句,這樣代碼更清晰易懂。如果晰易懂。如果ELSE子句中也將使用另一個(gè)子句中也將使用另一個(gè)IF語句,則用語句,則用ELSIF 子句更為子句更為方便,因?yàn)樵谇短椎慕Y(jié)尾可以省去方便,因?yàn)樵谇短椎慕Y(jié)尾可以省去END IF 關(guān)鍵詞關(guān)鍵詞數(shù)據(jù)庫開發(fā)技術(shù)FJUTIF-THEN-ELSIF 語句執(zhí)行流程數(shù)據(jù)庫開發(fā)技術(shù)FJUT創(chuàng)建邏輯條件使用使用IS NULL 操作符能處理操作符能處理 null 變量。變量。任何包含空值的算術(shù)表達(dá)式結(jié)果均為空值。任何包含空值的算術(shù)表達(dá)式結(jié)果均為空值。與與null值連接的表達(dá)式,將值連接的表達(dá)式,將null值當(dāng)作空串。值當(dāng)作空串。數(shù)
7、據(jù)庫開發(fā)技術(shù)FJUT邏輯表使用比較運(yùn)算符創(chuàng)建一個(gè)簡單的布爾條件。使用比較運(yùn)算符創(chuàng)建一個(gè)簡單的布爾條件。NOTTRUEFALSENULLORTRUEFALSENULLTRUEFALSENULLFALSETRUENULLANDTRUEFALSENULLTRUEFALSENULLTRUENULLNULLNULLFALSEFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUEFALSENULLNULLNULL數(shù)據(jù)庫開發(fā)技術(shù)FJUT布爾條件 V_FLAG 的各種可能值:的各種可能值:V_REORDER_FLAGV_AVAILABLE_FLAGV_FLAGTRUETRUETRUE
8、FALSENULLTRUENULLFALSEv_flag := v_reorder_flag AND v_available_flag; 數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值涉及空值的比較運(yùn)算總是產(chǎn)生涉及空值的比較運(yùn)算總是產(chǎn)生 NULL值。值。 NOT NULL 運(yùn)算產(chǎn)生運(yùn)算產(chǎn)生 NULL值。值。 在條件控制語句中在條件控制語句中, 如果條件產(chǎn)生如果條件產(chǎn)生NULL值值,與之關(guān)聯(lián)的語句與之關(guān)聯(lián)的語句序列不會(huì)執(zhí)行。序列不會(huì)執(zhí)行。 如果在一個(gè)簡單如果在一個(gè)簡單CASE語句中的表達(dá)式或語句中的表達(dá)式或CASE表達(dá)式產(chǎn)生表達(dá)式產(chǎn)生 NULL值,他不會(huì)匹配值,他不會(huì)
9、匹配 WHEN NULL語句。在這種情況下,語句。在這種情況下,你應(yīng)該使用搜索你應(yīng)該使用搜索 case語句的語法并用語句的語法并用 WHEN expression IS NULL來測試來測試. 當(dāng)當(dāng)IF條件產(chǎn)生條件產(chǎn)生FALSE 或或 NULL值,值, 執(zhí)行的是執(zhí)行的是ELSE子句的語子句的語句序列。句序列。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值 例子例子1:set serveroutput onDECLARE x number :=8; y number :=null; z number :=10;BEGIN IF x y and x z THEN DB
10、MS_OUTPUT.PUT_LINE(True); ELSE DBMS_OUTPUT.PUT_LINE(False); END IF;END;/執(zhí)行結(jié)果:執(zhí)行結(jié)果:FalsePL/SQL 過程已成功完成。過程已成功完成。數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值 例子例子2:x := 5; y := NULL; . IF x != y THEN - yields NULL, not TRUE sequence_of_statements; - not executed END IF; 例子例子3:a := NULL; b := NULL; . IF a = b
11、THEN - yields NULL, not TRUE sequence_of_statements; - not executed END IF; 數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值 例子4:DECLARE x NUMBER :=8; y NUMBER :=5; high NUMBER;BEGIN IF x y THEN high := x; ELSE high := y; END IF; DBMS_OUTPUT.PUT_LINE(high);END; /8PL/SQL 過程已成功完成。過程已成功完成。DECLARE x NUMBER :=8; y
12、NUMBER :=5; high NUMBER;BEGIN IF NOT x y THEN high := Y; ELSE high := X; END IF; DBMS_OUTPUT.PUT_LINE(high);END; /8PL/SQL 過程已成功完成。過程已成功完成。假如x,y的值非空, 下列2個(gè)程序是等價(jià)的問:下列問:下列2個(gè)程序是否等價(jià)?個(gè)程序是否等價(jià)?數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值 例子5: 假如x, y 之一為空,下列2個(gè)程序就不等價(jià)了。DECLARE x NUMBER :=NULL; y NUMBER :=5; high NUMBE
13、R;BEGIN IF x y THEN high := x; ELSE high := y; END IF; DBMS_OUTPUT.PUT_LINE(high);END; /5PL/SQL 過程已成功完成。過程已成功完成。DECLARE x NUMBER :=NULL; y NUMBER :=5; high NUMBER;BEGIN IF NOT x y THEN high := Y; ELSE high := X; END IF; DBMS_OUTPUT.PUT_LINE(high);END; /PL/SQL 過程已成功完成。過程已成功完成。數(shù)據(jù)庫開發(fā)技術(shù)FJUTCASE語句可以根據(jù)條件從
14、多個(gè)執(zhí)行分支中選擇相應(yīng)的執(zhí)行語句可以根據(jù)條件從多個(gè)執(zhí)行分支中選擇相應(yīng)的執(zhí)行動(dòng)作,并能返回一個(gè)值。動(dòng)作,并能返回一個(gè)值。1.基本CASE結(jié)構(gòu)語句:可使用變量名作為選擇器使用變量名作為選擇器CASE selectorWHEN expression1 THEN action_statement1;WHEN expression2 THEN action_statement2 .WHEN expressionN THEN action_statementNELSE action_statement;END CASE;條件選擇器的表達(dá)式可以是條件選擇器的表達(dá)式可以是復(fù)雜的表達(dá)式復(fù)雜的表達(dá)式END后面有后
15、面有CASECASE 語句 數(shù)據(jù)庫開發(fā)技術(shù)FJUT基本基本CASE結(jié)構(gòu)語句結(jié)構(gòu)語句SET SERVEROUTPUT ONDECLARE v_num NUMBER :=&any_num; v_res NUMBER;BEGIN v_res := MOD(v_num,2); CASE v_res WHEN 0 THEN DBMS_OUTPUT.PUT_LINE(v_num| IS EVEN); ELSE DBMS_OUTPUT.PUT_LINE (v_num| IS ODD); END CASE;END;/輸入輸入 any_num 的值的值: 55 IS ODDPL/SQL 過程已成功完成。
16、過程已成功完成。數(shù)據(jù)庫開發(fā)技術(shù)FJUTCASE 表達(dá)式表達(dá)式(CASE Expressions) 2.表達(dá)式結(jié)構(gòu)CASE語句(CASE Expressions): CASE結(jié)構(gòu)能以賦值表達(dá)式的形式出現(xiàn),它根據(jù)選擇變量的值結(jié)構(gòu)能以賦值表達(dá)式的形式出現(xiàn),它根據(jù)選擇變量的值求得不同的結(jié)果。求得不同的結(jié)果。變量變量:= CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2 . WHEN expressionN THEN resultN ELSE resultN+1; END;END后面沒有后面沒有CASE數(shù)據(jù)
17、庫開發(fā)技術(shù)FJUT表達(dá)式結(jié)構(gòu)表達(dá)式結(jié)構(gòu)CASE語句語句set serveroutput ondeclare v_grade char(2):=a;v_appraisal VARCHAR2(40);begin v_grade:=&a;v_appraisal := CASE v_gradeWHEN A THEN ExcellentWHEN B THEN Very GoodWHEN C THEN GoodELSE No such gradeEND;DBMS_OUTPUT.PUT_LINE (Grade: |v_grade | Appraisal |v_appraisal); END;/數(shù)據(jù)庫
18、開發(fā)技術(shù)FJUT搜索式CASE 語句 3. 不使用變量名作為選擇器,直接判斷條件表達(dá)式的值不使用變量名作為選擇器,直接判斷條件表達(dá)式的值,根據(jù)條件表達(dá)式?jīng)Q定轉(zhuǎn)向。,根據(jù)條件表達(dá)式?jīng)Q定轉(zhuǎn)向。CASE WHEN search_condition1 THEN result1 WHEN search_condition2 THEN result2 . WHEN search_conditionN THEN resultN ELSE resultN+1 END CASE; END后面有后面有CASE數(shù)據(jù)庫開發(fā)技術(shù)FJUT搜索式CASE語句 Searched CASE Statements SET SER
19、VEROUTPUT ONDEFINE p_grade = aDECLARE v_grade CHAR(1) :=UPPER(&p_grade);v_appraisal VARCHAR2(20);BEGIN WHEN v_grade = A THEN DBMS_OUTPUT.PUT_LINE (Grade: |v_grade| Appraisal |Excellent); WHEN v_grade = B THEN DBMS_OUTPUT.PUT_LINE (Grade: |v_grade| Appraisal |Very Good); WHEN v_grade = C THEN DBM
20、S_OUTPUT.PUT_LINE (Grade: |v_grade| Appraisal |Good); ELSE DBMS_OUTPUT.PUT_LINE (Grade: |v_grade| Appraisal |No such grade); END;/數(shù)據(jù)庫開發(fā)技術(shù)FJUT搜索式CASE語句DEFINE quantity=2DECLARE quantity NUMBER; projected NUMBER; needed NUMBER;BEGIN quantity :=&quantity; WHEN quantity is null THEN dbms_output.put_l
21、ine(Quantity not available); WHEN quantity + projected = needed THEN dbms_output.put_line(Quantity | quantity | should be enough if projections are met.); WHEN quantity = 0 THEN dbms_output.put_line(Quantity | quantity | is probably not enough.); here; EXCEPTION WHEN CASE_NOT_FOUND THEN dbms_output.
22、put_line(Somehow quantity must be less than 0.);END;/數(shù)據(jù)庫開發(fā)技術(shù)FJUT4. 搜索式CASE表達(dá)式Searched CASE Expression SET SERVEROUTPUT ONDEFINE p_grade = aDECLARE v_grade CHAR(1) :=UPPER(&p_grade); v_appraisal VARCHAR2(20);BEGIN v_appraisal := CASE WHEN v_grade = A THEN Excellent WHEN v_grade = B THEN Very Good
23、 WHEN v_grade = C THEN Good ELSE No such gradeEND; DBMS_OUTPUT.PUT_LINE (Grade: |v_grade | Appraisal |v_appraisal); END;/END后面沒有后面沒有CASE數(shù)據(jù)庫開發(fā)技術(shù)FJUT循環(huán)控制循環(huán)控制: LOOP 語句語句LOOP 語句多次執(zhí)行語句序列。語句多次執(zhí)行語句序列。LOOP 語句有三種形式語句有三種形式:Basic loop 無條件的循環(huán)無條件的循環(huán)FOR loop 有計(jì)數(shù)的循環(huán)有計(jì)數(shù)的循環(huán)WHILE loop 有條件的循環(huán)有條件的循環(huán)EXIT 是強(qiáng)制結(jié)束循環(huán)的語句。是強(qiáng)制結(jié)
24、束循環(huán)的語句。數(shù)據(jù)庫開發(fā)技術(shù)FJUTBasic Loop語法LOOP statement1; . . . EXIT WHEN condition;END LOOP;where:condition是一邏輯變量或邏輯表達(dá)式是一邏輯變量或邏輯表達(dá)式 (TRUE, FALSE, or NULL);EXIT 是強(qiáng)制結(jié)束循環(huán)的語句。是強(qiáng)制結(jié)束循環(huán)的語句。數(shù)據(jù)庫開發(fā)技術(shù)FJUTBasic LoopDECLARE v_ordiditem.ordid%TYPE := 601; v_counterNUMBER(2) := 1;BEGIN LOOP INSERT INTO item(ordid, itemid) V
25、ALUES(v_ordid, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter 10; END LOOP;END;舉例:循環(huán)語句的頂部不對(duì)條件進(jìn)行檢查循環(huán)語句的頂部不對(duì)條件進(jìn)行檢查循環(huán)體至少執(zhí)行一次。循環(huán)體至少執(zhí)行一次。進(jìn)入循環(huán)后才能測試條件,稱為進(jìn)入循環(huán)后才能測試條件,稱為“后測試循環(huán)后測試循環(huán)”EXIT WHEN v_counter 10;可改為:可改為:IF v_counter 10 THEN EXIT; END IF;數(shù)據(jù)庫開發(fā)技術(shù)FJUTFOR Loop 語法語法 使用使用 FOR loop減少對(duì)循環(huán)次數(shù)的檢測。減
26、少對(duì)循環(huán)次數(shù)的檢測。 FOR 中的中的counter不須聲明不須聲明; PL/SQL隱式聲明隱式聲明 counter為整數(shù)為整數(shù)(BINARY_INTEGER) 。 循環(huán)范圍的上、下界可以是文字、變量或表達(dá)式。循環(huán)范圍的上、下界可以是文字、變量或表達(dá)式。 如果循環(huán)的下界大于上界,循環(huán)就不會(huì)執(zhí)行。如果循環(huán)的下界大于上界,循環(huán)就不會(huì)執(zhí)行。 簡單循環(huán)和簡單循環(huán)和WHILE循環(huán)的疊代次數(shù)事先并不知道,它取循環(huán)的疊代次數(shù)事先并不知道,它取決于循環(huán)條件。而決于循環(huán)條件。而FOR Loop的疊代次數(shù)是確定的。的疊代次數(shù)是確定的。 使用保留字使用保留字REVERSE時(shí)為減,從上界變化到下界時(shí)為減,從上界變化到
27、下界FOR counter in REVERSE 下界下界.上界上界 LOOP statement1; statement2; . . .END LOOP;數(shù)據(jù)庫開發(fā)技術(shù)FJUT規(guī)則:規(guī)則:僅在循環(huán)體中引用僅在循環(huán)體中引用 計(jì)數(shù)器計(jì)數(shù)器 ,在循環(huán)體外計(jì)數(shù),在循環(huán)體外計(jì)數(shù)器沒被定義。器沒被定義。可以使用一個(gè)表達(dá)式來引用計(jì)數(shù)器的當(dāng)前值??梢允褂靡粋€(gè)表達(dá)式來引用計(jì)數(shù)器的當(dāng)前值。在循環(huán)體中不能為計(jì)數(shù)器賦值。在循環(huán)體中不能為計(jì)數(shù)器賦值。FOR Loop數(shù)據(jù)庫開發(fā)技術(shù)FJUTFOR Loop舉例:舉例:在在item表中為訂單號(hào)為表中為訂單號(hào)為601的插入的插入10個(gè)新的項(xiàng)目。個(gè)新的項(xiàng)目。DECLARE v
28、_ordiditem.ordid%TYPE := 601;BEGIN FOR i IN 1.10 LOOP INSERT INTO item(ordid, itemid) VALUES(v_ordid, i); END LOOP;END;數(shù)據(jù)庫開發(fā)技術(shù)FJUTFOR LoopDECLARE N2 NUMBER := 0;BEGIN FOR N1 IN REVERSE 1.2 LOOP N2:=N2+1; DBMS_OUTPUT.PUT_LINE(TO_CHAR(N2); END LOOP;END;12數(shù)據(jù)庫開發(fā)技術(shù)FJUT上、下界為變量的FOR循環(huán)舉例:DECLARE N2 NUMBER :=
29、 1; N3 NUMBER := 2;BEGIN FOR N1 IN REVERSE N2.N3 LOOP DBMS_OUTPUT.PUT_LINE(FOR.LOOP TESTING); END LOOP;END;FOR.LOOP TESTINGFOR.LOOP TESTINGFOR Loop數(shù)據(jù)庫開發(fā)技術(shù)FJUTWHILE Loop語法語法在在 WHILE loop 中,如果條件成立(中,如果條件成立(TRUE)則重復(fù)執(zhí)行語句序列。)則重復(fù)執(zhí)行語句序列。WHILE condition LOOP statement1; statement2; . . .END LOOP;數(shù)據(jù)庫開發(fā)技術(shù)FJUT
30、WHILE Loop舉例:舉例:DECLARE v_countNUMBER(2) := 1;BEGIN WHILE v_count = &p_items LOOP INSERT INTO item (ordid, itemid) VALUES (&p_new_order, v_count); v_count := v_count + 1; END LOOP; COMMIT;END;/數(shù)據(jù)庫開發(fā)技術(shù)FJUTWHILE 循環(huán)與 FOR 循環(huán)的不同F(xiàn)OR 循環(huán)中有一個(gè)隱式的計(jì)數(shù)器,每循環(huán)一次自循環(huán)中有一個(gè)隱式的計(jì)數(shù)器,每循環(huán)一次自動(dòng)增量(或減量)。而動(dòng)增量(或減量)。而WHILE 循
31、環(huán)的計(jì)數(shù)器是顯循環(huán)的計(jì)數(shù)器是顯式給出的,需有專門的語句為計(jì)數(shù)器增量(或減式給出的,需有專門的語句為計(jì)數(shù)器增量(或減量)。量)。WHILE 循環(huán)中必須有一個(gè)顯式的條件且循環(huán)體中循環(huán)中必須有一個(gè)顯式的條件且循環(huán)體中必須有若干個(gè)語句用來改變條件。必須有若干個(gè)語句用來改變條件。數(shù)據(jù)庫開發(fā)技術(shù)FJUT循環(huán)的嵌套和循環(huán)標(biāo)記多層循環(huán)嵌套多層循環(huán)嵌套使用循環(huán)標(biāo)記以區(qū)分塊和循環(huán)。使用循環(huán)標(biāo)記以區(qū)分塊和循環(huán)。使用引用了循環(huán)標(biāo)記的使用引用了循環(huán)標(biāo)記的 EXIT 語句退出外部循環(huán)語句退出外部循環(huán)循環(huán)標(biāo)記的命名遵循其他標(biāo)識(shí)符的命名規(guī)則。循環(huán)標(biāo)記的命名遵循其他標(biāo)識(shí)符的命名規(guī)則。循環(huán)標(biāo)記應(yīng)位于語句之前,可以與語句在同一行也
32、循環(huán)標(biāo)記應(yīng)位于語句之前,可以與語句在同一行也可分別在不同行??煞謩e在不同行。帶有循環(huán)標(biāo)簽的循環(huán)是將標(biāo)簽及其定界符帶有循環(huán)標(biāo)簽的循環(huán)是將標(biāo)簽及其定界符()寫在保留字寫在保留字LOOP之前。之前。在使用循環(huán)標(biāo)記時(shí),確保在使用循環(huán)標(biāo)記時(shí),確保END LOOP 語句后面也要語句后面也要寫上循環(huán)標(biāo)記名,以使程序更清晰易懂。寫上循環(huán)標(biāo)記名,以使程序更清晰易懂。數(shù)據(jù)庫開發(fā)技術(shù)FJUT循環(huán)的嵌套和標(biāo)簽.BEGIN LOOP v_counter := v_counter+1; EXIT WHEN v_counter10; LOOP . EXIT Outer_loop WHEN total_done = YES;
33、 EXIT WHEN inner_done = YES; . END LOOP Inner_loop; . END LOOP Outer_loop;END; 數(shù)據(jù)庫開發(fā)技術(shù)FJUTPL/SQL中的SQL語句使用使用SELECT命令從數(shù)據(jù)庫中選取一行數(shù)據(jù),僅能返回單命令從數(shù)據(jù)庫中選取一行數(shù)據(jù),僅能返回單行值。行值。使用使用DML命令更新數(shù)據(jù)庫中行。命令更新數(shù)據(jù)庫中行。使用使用COMMIT, ROLLBACK或或SAVEPOINT 命令控制事命令控制事務(wù)。務(wù)。使用內(nèi)部指針確定使用內(nèi)部指針確定DML的輸出。的輸出。PL/SQL不支持?jǐn)?shù)據(jù)定義語言不支持?jǐn)?shù)據(jù)定義語言 (DDL) 。PL/SQL 不支持?jǐn)?shù)
34、據(jù)控制語言不支持?jǐn)?shù)據(jù)控制語言 (DCL), 如如 GRANT 和和 REVOKE。數(shù)據(jù)庫開發(fā)技術(shù)FJUT PL/SQL 中的SELECT語句SELECT語句的作用是從數(shù)據(jù)庫中獲取數(shù)據(jù)。語句的作用是從數(shù)據(jù)庫中獲取數(shù)據(jù)。句法:句法:SELECT select_listINTO variable_name, variable_name. | record_name FROM tableWHERE condition;數(shù)據(jù)庫開發(fā)技術(shù)FJUT PL/SQL 中的中的SELECT語句語句INTO語句在語句在PL/SQL是必須的。是必須的。舉例舉例DECLARE v_deptnoNUMBER(2); v_l
35、oc VARCHAR2(15);BEGIN SELECTdeptno, loc INTOv_deptno, v_loc FROMdept WHEREdname = SALES; .END;必須遵循以下原則:查詢僅返回單行值。無返回值或返回多行必須遵循以下原則:查詢僅返回單行值。無返回值或返回多行值均會(huì)產(chǎn)生錯(cuò)誤,對(duì)于這些錯(cuò)誤,在值均會(huì)產(chǎn)生錯(cuò)誤,對(duì)于這些錯(cuò)誤,在PL/SQL塊的異常處理部塊的異常處理部分,以分,以 NO_DATA_FOUND 和和 TOO_MANY_ROWS 標(biāo)明。標(biāo)明。數(shù)據(jù)庫開發(fā)技術(shù)FJUT在PL/SQL中檢索數(shù)據(jù)舉例:舉例:按規(guī)定的次序檢索日期和裝運(yùn)日期。按規(guī)定的次序檢索日期和
36、裝運(yùn)日期。DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate, v_shipdate FROM ord WHERE id = 620;.END;數(shù)據(jù)庫開發(fā)技術(shù)FJUTDECLARE v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10; BEGIN SELECTSUM(sal) INTOv_sum_sal FROMemp WHEREdeptno = v_deptno;END;在PL/SQL中檢索數(shù)據(jù)舉例:舉例:返回指定部門所有員工的工資總額。返回指定部門所有員工的工資總額。數(shù)據(jù)庫開發(fā)技術(shù)FJUTINSERTUPDATEDELETE在 PL/SQL 中操縱數(shù)據(jù)使用使用DML 命令修改數(shù)據(jù)庫中的表命令修改數(shù)據(jù)庫中的表:INSERTUPDATEDELETE數(shù)據(jù)庫開發(fā)技術(shù)FJUT插入數(shù)據(jù)舉例:舉例:給表給表EMP增加一個(gè)新員工的信息。增加一個(gè)新員工的信息。DECLARE v_empno emp.empno%TYPEBEGIN SELECT emp_s
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版木制家具生產(chǎn)加工木工合作合同范本4篇
- 2025版委托檢測合同書-光纖網(wǎng)絡(luò)性能檢測技術(shù)3篇
- 二零二五版水產(chǎn)品電商平臺(tái)大數(shù)據(jù)分析服務(wù)合同2篇
- 2025年度母子公司新能源儲(chǔ)能技術(shù)研發(fā)合作合同3篇
- 《吳組緗天下太平》課件
- 單板加工自動(dòng)化與智能化技術(shù)考核試卷
- 2025版互聯(lián)網(wǎng)醫(yī)療投資項(xiàng)目融資借款合同3篇
- 《物價(jià)上漲時(shí)政》課件
- 2025年度木工工具租賃與施工服務(wù)承包合同4篇
- 2025年兒童玩具連鎖店加盟合同
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級(jí)英語下冊(cè)寒假提前學(xué)(含答案)
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 2024年度窯爐施工協(xié)議詳例細(xì)則版B版
- 幼兒園籃球課培訓(xùn)
- 【企業(yè)盈利能力探析的國內(nèi)外文獻(xiàn)綜述2400字】
- 統(tǒng)編版(2024新版)七年級(jí)《道德與法治》上冊(cè)第一單元《少年有夢(mèng)》單元測試卷(含答案)
- 100道20以內(nèi)的口算題共20份
- 高三完形填空專項(xiàng)訓(xùn)練單選(部分答案)
- 護(hù)理查房高鉀血癥
- 項(xiàng)目監(jiān)理策劃方案匯報(bào)
評(píng)論
0/150
提交評(píng)論