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

正文內(nèi)容

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

2025-03-04 11:03 本頁面
 

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