freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

oracle第14章plsql語(yǔ)言基礎(chǔ)(編輯修改稿)

2025-03-04 11:03 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 52 編譯指示 ? 編譯指示是對(duì)編譯程序發(fā)出的特殊指令,也稱為偽指令,不會(huì)改變程序含義。它只是向編譯程序傳遞信息,類似于嵌入在 SQL中的注釋。 ? 在 PL/SQL中使用 PRAGMA關(guān)鍵字通知編譯程序,PL/SQL語(yǔ)句的剩余部分是一個(gè)編譯指示或命令。編譯指示在編譯時(shí)被處理,而不會(huì)在運(yùn)行時(shí)被執(zhí)行,類似于 C語(yǔ)言中的 define。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 53 ? PL/SQL提供以下 4種編譯指示 ? EXCEPTION_INIT:告訴編譯程序?qū)⒁粋€(gè)特定的錯(cuò)誤號(hào)與程序中所聲明的異常標(biāo)識(shí)符關(guān)聯(lián)起來(lái)。 ? RESTRICT_REFERENCES:告訴編譯程序打包程序的純度,即對(duì)函數(shù)中可以使用的 SQL語(yǔ)句和包變量進(jìn)行限制。 ? SERIALLY_REUSEABLE:告訴 PL/SQL運(yùn)行引擎時(shí),在數(shù)據(jù)引用之間不要保持包級(jí)數(shù)據(jù)。 ? AUTONOMOUS_TRANSACTION:告訴編譯程序,該程序塊為自治事務(wù),即該事務(wù)的提交和回滾是獨(dú)立進(jìn)行的。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 54 PL/SQL中 SQL語(yǔ)句 ? 由于 PL/SQL執(zhí)行采用早期綁定,即在編譯階段對(duì)變量進(jìn)行綁定,識(shí)別程序中標(biāo)識(shí)符的位置,檢查用戶權(quán)限、數(shù)據(jù)庫(kù)對(duì)象等信息,因此在 PL/SQL中只允許出現(xiàn) : ? SELECT ? DML(UPDATE、 DELETE、 INSERT) ? 事務(wù)控制語(yǔ)句( COMMIT、 ROLLBACK、SAVEPOINT) ? 注意 ? DDL語(yǔ)句不可以直接使用 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 55 ? 通常,利用 SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí),各種相關(guān)量都在代碼中以常量的形式指定,而在 PL/SQL中可以通過(guò)變量動(dòng)態(tài)指定各種相關(guān)量的值,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的動(dòng)態(tài)操作。 ? DECLARE ? v_empno NUMBER(4)。 ? BEGIN ? v_empno:=x。 ? UPDATE emp SET sal=sal+100 WHERE empno=v_empno。 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 56 ?SELECT語(yǔ)句 ?在 PL/SQL程序中,使用 SELECT… INTO語(yǔ)句查詢一個(gè)記錄的信息。 ?其語(yǔ)法為: ?SELECT select_list_item INTO ?variable_list|record_variable ?FROM table ?WHERE condition。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 57 ? 根據(jù)員工名或員工號(hào)查詢員工信息,程序?yàn)椋? ? DECLARE ? v_emp emp%ROWTYPE。 ? v_ename %type。 ? v_sal %type。 ? BEGIN ? SELECT * INTO v_emp FROM emp ? WHERE ename=39。SMITH39。 ? (||39。 39。||)。 ? SELECT ename,sal INTO v_ename,v_sal FROM emp ? WHERE empno=7900。 ? (v_ename||39。 39。||v_sal)。 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 58 ? 注意: ? SELECT… INTO語(yǔ)句只能查詢一個(gè)記錄的信息,如果沒(méi)有查詢到任何數(shù)據(jù),會(huì)產(chǎn)生 NO_DATA_FOUND異常;如果查詢到多個(gè)記錄,則會(huì)產(chǎn)生TOO_MANY_ROWS異常。 ? INTO句子后的變量用于接收查詢的結(jié)果,變量的個(gè)數(shù)、順序應(yīng)該與查詢的目標(biāo)數(shù)據(jù)相匹配,也可以是記錄類型的變量。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 59 ? 用 SELECT… INTO語(yǔ)句查詢 10號(hào)部門(mén)所有員工信息。 ? DECLARE ? v_emp emp%ROWTYPE。 ? BEGIN ? SELECT * INTO v_emp FROM emp WHERE deptno=10。 ? END。 ? / ? * ? ERROR 位于第 1 行 : ? ORA01422: 實(shí)際返回的行數(shù)超出請(qǐng)求的行數(shù) ? ORA06512: 在 line 4 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 60 ? DML語(yǔ)句 ? PL/SQL中 DML語(yǔ)句對(duì)標(biāo)準(zhǔn) SQL語(yǔ)句中的 DML語(yǔ)句進(jìn)行了擴(kuò)展,允許使用變量。 ? DECLARE ? v_empno %TYPE :=7500。 ? BEGIN ? INSERT INTO emp(empno,ename,sal,deptno) ? VALUES(v_empno,39。JOAN39。,2300,20)。 ? UPDATE emp SET sal=sal+100 ? WHERE empno=v_empno。 ? DELETE FROM emp WHERE empno=v_empno。 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 61 ?WHERE ? 標(biāo)識(shí)符的區(qū)分 ?系統(tǒng)首先查看 WHERE子句中的標(biāo)識(shí)符是否與表中的列名相同,如果相同,則該標(biāo)識(shí)符被解釋為列名;如果沒(méi)有同名列,系統(tǒng)檢查該標(biāo)識(shí)符是不是 PL/SQL語(yǔ)句塊的變量。 ? 字符串比較 ?填充比較:通過(guò)在短字符串后添加空格,使兩個(gè)字符串達(dá)到相同長(zhǎng)度,然后根據(jù)每個(gè)字符的 ASCII碼進(jìn)行比較。 ?非填充比較:根據(jù)每個(gè)字符的 ASCII碼進(jìn)行比較,最先結(jié)束的字符串為小。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 62 ?那么何時(shí)采用填充比較,何時(shí)采用非填充比較呢? ? PL/SQL中規(guī)定,對(duì)定長(zhǎng)的字符串( CHAR類型的字符串和字符串常量)采用填充比較;如果比較的字符串中有一個(gè)是變長(zhǎng)字符串( VARCHAR2類型的字符串),則采用非填充比較。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 63 ? 例如,已知 emp表中 ename列類型為 VARCHAR2( 10),執(zhí)行下面的代碼。 ? DECLARE ? v_ename CHAR(10):=39。TURNER39。 ? v_ename VARCHAR2(20)。 ? v_ename %TYPE:=39。TURNER39。 ? v_sal %TYPE。 ? BEGIN ? SELECT sal INTO v_sal FROM emp WHERE ename=v_ename。 ? (v_sal)。 ? END。 ? / ? DECLARE ? * ? 第 1 行出現(xiàn)錯(cuò)誤 : ? ORA01403: 未找到數(shù)據(jù) ? ORA06512: 在 line 6 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 64 ? 產(chǎn)生錯(cuò)誤的原因是 VARCHAR2( 10)類型與 CHAR( 10)類型比較時(shí)采用非填充比較,因此無(wú)法查詢到員工名為“ TURNER”的員工??梢詫?v_ename變量類型修改為VARCHAR2( 10)類型,也可以直接采用%TYPE方式定義。 ? 因此,為了保證程序的正確執(zhí)行,一定要使 PL/SQL語(yǔ)句塊中的變量與要比較的數(shù)據(jù)庫(kù)列擁有相同的數(shù)據(jù)類型,可以使用 %TYPE或 %ROWTYPE來(lái)定義變量。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 65 ? RETURNING ? 如果要查詢當(dāng)前 DML語(yǔ)句操作的記錄的信息,可以在 DML語(yǔ)句末尾使用 RETURNING語(yǔ)句返回該記錄的信息。 ? RETURNING語(yǔ)句的基本語(yǔ)法: ? RETURNING select_list_item INTO variable_list|record_variable。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 66 ? DECLARE ? v_sal %TYPE。 ? BEGIN ? UPDATE emp SET sal=sal+100 WHERE empno=7844 RETURNING sal INTO v_sal。 ? (v_sal)。 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 67 控制結(jié)構(gòu) ?選擇結(jié)構(gòu) ?循環(huán)結(jié)構(gòu) ?跳轉(zhuǎn)結(jié)構(gòu) Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 68 ?IF語(yǔ)句 ?CASE語(yǔ)句 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 69 ( 1) IF語(yǔ)句 ? 語(yǔ)法 ? IF condition1 THEN statements1。 ? [ELSIF condition2 THEN statements2。] ? …… ? [ELSE else_statements]。 ? END IF。 ? 注意 ? 條件是一個(gè)布爾型變量或表達(dá)式,取值只能是 TRUE,F(xiàn)ALSE, NULL。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 70 ? 例如,輸入一個(gè)員工號(hào),修改該員工的工資,如果該員工為 10號(hào)部門(mén),工資增加 100;若為 20號(hào)部門(mén),工資增加 160;若為 30號(hào)部門(mén),工資增加200;否則增加 300。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 71 ? DECLARE ? v_deptno %type。 ? v_increment NUMBER(4)。 ? v_empno %type。 ? BEGIN ? v_empno:=x。 ? SELECT deptno INTO v_deptno FROM emp ? WHERE empno=v_empno。 ? IF v_deptno=10 THEN v_increment:=100。 ? ELSIF v_deptno=20 THEN v_increment:= ? ELSIF v_deptno=30 THEN v_increment:=200。 ? ELSE v_increment:=300。 ? END IF。 ? UPDATE emp SET sal=sal+v_increment ? WHERE empno=v_empno。 ? END。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 72 ? 由于 PL/SQL中的邏輯運(yùn)算結(jié)果有 TRUE, FALSE和 NULL三種,因此在進(jìn)行選擇條件判斷時(shí),要考慮條件為 NULL的情況。例如,下面兩個(gè)程序,如果不考慮條件為 NULL的情況,則運(yùn)行結(jié)果是一致的,但是若考慮條件為 NULL的情況,則結(jié)果就不同了。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 73 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 74 ? 為了避免條件為 NULL時(shí)出現(xiàn)歧義,應(yīng)該在程序中進(jìn)行條件是否為 NULL的檢查。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 75 ( 2) CASE語(yǔ)句 ? 基本語(yǔ)法 ? CASE ? WHEN condition1 THEN statements1。 ? WHEN condition2 THEN statements2。 ? …… ? WHEN conditionn THEN statementsn。 ? [ELSE else_statements。] ? END CASE。 ? 注意 ? 在 CASE語(yǔ)句中,當(dāng)?shù)谝粋€(gè) WHEN條件為真時(shí),執(zhí)行其后的操作,操作完后結(jié)束 CASE語(yǔ)句。其他的 WHEN條件不再判斷,其后的操作也不執(zhí)行。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 76 ? 根據(jù)輸入的員工號(hào),修改該員工工資。如果該員工工資低于 1000,則工資增加 200;如果工資在1000~ 2023之間,則增加 150;如果工資在2023~ 3000之間,則增加 100;否則增加 50。 Oracle10g 數(shù)據(jù)庫(kù)基礎(chǔ)教程 77 ? DECLARE ? v_sal %type。 ? v_increment NUMBER(4)。 ? v_empno %type。 ? BEGIN ? v_empno:=x。 ? SELECT sal INTO v_sal FROM emp ? WHERE empno=v_empno。 ? CASE ? WHEN v_sal1000 THEN v_increment:=200。 ? WHEN v_sal2023 THEN v_increment:=150。 ? WHEN v_sal3000 THEN v_increment:=100。 ? ELSE v_increment:=50。 ?
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1