版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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)的用途和類型 識別并構(gòu)造不同的循環(huán)語句識別并構(gòu)造不同的循環(huán)語句 使用嵌套循環(huán)和標(biāo)簽控制塊的流程使用嵌套循環(huán)和標(biāo)簽控制塊的流程在在PL/SQLPL/SQL中嵌入中嵌入SQLSQL的的SELECTSELECT語句語句 動態(tài)聲明一個動態(tài)聲明一個PL/SQLPL/SQL變量的數(shù)據(jù)類型和長度變量的數(shù)據(jù)類型和長度 在在PL/SQL PL/SQL 中嵌入中嵌入SQLSQL的的DML DML 語句
2、語句本章要點數(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í)行一系列指令,不會跳從開始到結(jié)束以線性次序執(zhí)行一系列指令,不會跳過任何一條指令,也不會重復(fù)任何一條指令。過任何一條指令,也不會重復(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)動作。相應(yī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ù)定日期與裝運日期相差少于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子句中也將使用另一個子句中也將使用另一個IF語句,則用語句,則用ELSIF 子句更為子句更為方便,因為在嵌套的結(jié)尾可以省去方便,因為在嵌套的結(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邏輯表使用比較運算符創(chuàng)建一個簡單的布爾條件。使用比較運算符創(chuàng)建一個簡單的布爾條件。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在比較和條件語句中處理空值在比較和條件語句中處理空值涉及空值的比較運算總是產(chǎn)生涉及空值的比較運算總是產(chǎn)生 NULL值。值。 NOT NULL 運算產(chǎn)生運算產(chǎn)生 NULL值。值。 在條件控制語句中在條件控制語句中, 如果條件產(chǎn)生如果條件產(chǎn)生NULL值值,與之關(guān)聯(lián)的語句與之關(guān)聯(lián)的語句序列不會執(zhí)行。序列不會執(zhí)行。 如果在一個簡單如果在一個簡單CASE語句中的表達(dá)式或語句中的表達(dá)式或CASE表達(dá)式產(chǎn)生表達(dá)式產(chǎn)生 NULL值,他不會匹配值,他不會
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個程序是等價的問:下列問:下列2個程序是否等價?個程序是否等價?數(shù)據(jù)庫開發(fā)技術(shù)FJUT在比較和條件語句中處理空值在比較和條件語句中處理空值 例子5: 假如x, y 之一為空,下列2個程序就不等價了。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、多個執(zhí)行分支中選擇相應(yīng)的執(zhí)行語句可以根據(jù)條件從多個執(zhí)行分支中選擇相應(yīng)的執(zhí)行動作,并能返回一個值。動作,并能返回一個值。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 有計數(shù)的循環(huán)有計數(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)語句的頂部不對條件進(jìn)行檢查循環(huán)語句的頂部不對條件進(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減少對循環(huán)次數(shù)的檢測。減
26、少對循環(huán)次數(shù)的檢測。 FOR 中的中的counter不須聲明不須聲明; PL/SQL隱式聲明隱式聲明 counter為整數(shù)為整數(shù)(BINARY_INTEGER) 。 循環(huán)范圍的上、下界可以是文字、變量或表達(dá)式。循環(huán)范圍的上、下界可以是文字、變量或表達(dá)式。 如果循環(huán)的下界大于上界,循環(huán)就不會執(zhí)行。如果循環(huán)的下界大于上界,循環(huán)就不會執(zhí)行。 簡單循環(huán)和簡單循環(huán)和WHILE循環(huán)的疊代次數(shù)事先并不知道,它取循環(huán)的疊代次數(shù)事先并不知道,它取決于循環(huán)條件。而決于循環(huán)條件。而FOR Loop的疊代次數(shù)是確定的。的疊代次數(shù)是確定的。 使用保留字使用保留字REVERSE時為減,從上界變化到下界時為減,從上界變化到
27、下界FOR counter in REVERSE 下界下界.上界上界 LOOP statement1; statement2; . . .END LOOP;數(shù)據(jù)庫開發(fā)技術(shù)FJUT規(guī)則:規(guī)則:僅在循環(huán)體中引用僅在循環(huán)體中引用 計數(shù)器計數(shù)器 ,在循環(huán)體外計數(shù),在循環(huán)體外計數(shù)器沒被定義。器沒被定義??梢允褂靡粋€表達(dá)式來引用計數(shù)器的當(dāng)前值??梢允褂靡粋€表達(dá)式來引用計數(shù)器的當(dāng)前值。在循環(huán)體中不能為計數(shù)器賦值。在循環(huán)體中不能為計數(shù)器賦值。FOR Loop數(shù)據(jù)庫開發(fā)技術(shù)FJUTFOR Loop舉例:舉例:在在item表中為訂單號為表中為訂單號為601的插入的插入10個新的項目。個新的項目。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)中有一個隱式的計數(shù)器,每循環(huán)一次自循環(huán)中有一個隱式的計數(shù)器,每循環(huán)一次自動增量(或減量)。而動增量(或減量)。而WHILE 循
31、環(huán)的計數(shù)器是顯循環(huán)的計數(shù)器是顯式給出的,需有專門的語句為計數(shù)器增量(或減式給出的,需有專門的語句為計數(shù)器增量(或減量)。量)。WHILE 循環(huán)中必須有一個顯式的條件且循環(huán)體中循環(huán)中必須有一個顯式的條件且循環(huán)體中必須有若干個語句用來改變條件。必須有若干個語句用來改變條件。數(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)識符的命名規(guī)則。循環(huán)標(biāo)記的命名遵循其他標(biāo)識符的命名規(guī)則。循環(huán)標(biāo)記應(yīng)位于語句之前,可以與語句在同一行也
32、循環(huán)標(biāo)記應(yīng)位于語句之前,可以與語句在同一行也可分別在不同行。可分別在不同行。帶有循環(huán)標(biāo)簽的循環(huán)是將標(biāo)簽及其定界符帶有循環(huán)標(biāo)簽的循環(huán)是將標(biāo)簽及其定界符()寫在保留字寫在保留字LOOP之前。之前。在使用循環(huán)標(biāo)記時,確保在使用循環(huán)標(biāo)記時,確保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;必須遵循以下原則:查詢僅返回單行值。無返回值或返回多行必須遵循以下原則:查詢僅返回單行值。無返回值或返回多行值均會產(chǎn)生錯誤,對于這些錯誤,在值均會產(chǎn)生錯誤,對于這些錯誤,在PL/SQL塊的異常處理部塊的異常處理部分,以分,以 NO_DATA_FOUND 和和 TOO_MANY_ROWS 標(biāo)明。標(biāo)明。數(shù)據(jù)庫開發(fā)技術(shù)FJUT在PL/SQL中檢索數(shù)據(jù)舉例:舉例:按規(guī)定的次序檢索日期和裝運日期。按規(guī)定的次序檢索日期和
36、裝運日期。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增加一個新員工的信息。增加一個新員工的信息。DECLARE v_empno emp.empno%TYPEBEGIN SELECT emp_s
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度實習(xí)生實習(xí)合同:實習(xí)實訓(xùn)與就業(yè)指導(dǎo)協(xié)議3篇
- 2025年度物業(yè)服務(wù)管理深度合作合同2篇
- 2024年租賃期滿續(xù)租合同:舊房東與續(xù)租租客2篇
- 2025年度生物醫(yī)藥行業(yè)研發(fā)人員招聘合同范本3篇
- 個人理財顧問投資咨詢免責(zé)協(xié)議
- 2024年軟件產(chǎn)品短期試用協(xié)議模板一
- 2025年度光伏發(fā)電項目安裝施工合作協(xié)議3篇
- 軟件產(chǎn)品授權(quán)使用協(xié)議
- 二零二五年度全國連鎖品牌店鋪轉(zhuǎn)讓合同范本3篇
- 2024年金融擔(dān)保業(yè)務(wù)合同規(guī)范3篇
- 新人教版一年級數(shù)學(xué)下冊全冊導(dǎo)學(xué)案
- 2025年中考語文復(fù)習(xí)之現(xiàn)代文閱讀:非連續(xù)性文本閱讀(10題)
- (正式版)JBT 10437-2024 電線電纜用可交聯(lián)聚乙烯絕緣料
- 矛盾糾紛排查化解登記表
- 教科版三年級上冊科學(xué)期末測試卷(二)【含答案】
- DB37T 5175-2021 建筑與市政工程綠色施工技術(shù)標(biāo)準(zhǔn)
- 泌尿道感染臨床路徑
- 古詩詞常見的修辭手法講課教案
- 科研項目評審評分表
- A5技術(shù)支持的課堂導(dǎo)入作業(yè)1—問題描述.針對日常教學(xué)中的某一主題針對教學(xué)目標(biāo)、教學(xué)內(nèi)容以及教學(xué)對象用簡短的語言描述當(dāng)前課堂導(dǎo)入環(huán)節(jié)中存在的問題和不足以及借助信息技術(shù)改進(jìn)課堂導(dǎo)入的必要性
- 國家開放大學(xué)《土木工程力學(xué)(本)》章節(jié)測試參考答案
評論
0/150
提交評論