




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ACCP V4.0第八章第八章觸發(fā)器和內(nèi)置程序包ACCP V4.02回顧q子程序是命名的 PL/SQL 塊,存儲在數(shù)據(jù)庫中,可帶參數(shù)并可在需要時隨時調(diào)用q有兩種類型的PL/SQL子程序,即過程和函數(shù)q過程用戶執(zhí)行特定的任務(wù),函數(shù)用于執(zhí)行任務(wù)并返回值q程序包是對相關(guān)類型、變量、常量、游標、異常、過程和函數(shù)等對象的封裝q程序包由兩部分組成,即包規(guī)范和包主體q使用程序包的優(yōu)點是:模塊化、更輕松的程序設(shè)計、信息隱藏、新增功能以及性能更佳ACCP V4.03目標q理解和應(yīng)用觸發(fā)器q了解內(nèi)置程序包ACCP V4.04觸發(fā)器q觸發(fā)器是當(dāng)特定事件出現(xiàn)時自動執(zhí)行的存儲過程q特定事件可以是執(zhí)行更新的DML語句和D
2、DL語句q觸發(fā)器不能被顯式調(diào)用q觸發(fā)器的功能:q自動生成數(shù)據(jù)q自定義復(fù)雜的安全權(quán)限q提供審計和日志記錄q啟用復(fù)雜的業(yè)務(wù)邏輯ACCP V4.05創(chuàng)建觸發(fā)器的語法CREATE OR REPLACE TRIGGER trigger_nameAFTER | BEFORE | INSTEAD OFINSERT OR UPDATE OF column_list OR DELETEON table_or_view_nameREFERENCING OLD AS old / NEW AS newFOR EACH ROWWHEN (condition)pl/sql_block;ACCP V4.06觸發(fā)器的組成部分
3、 3-1觸發(fā)器由三部分組成:q觸發(fā)器語句(事件)q定義激活觸發(fā)器的 DML 事件和 DDL 事件q觸發(fā)器限制q執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器q觸發(fā)器操作(主體)q包含一些 SQL 語句和代碼,它們在發(fā)出了觸發(fā)器語句且觸發(fā)限制的值為真時運行ACCP V4.07觸發(fā)器的組成部分 3-2 SQL CREATE OR REPLACE TRIGGER trig_salAFTER UPDATE OF empsal ON salary_records觸發(fā)器語句為 salary_records 表創(chuàng)建 trig-sal 觸發(fā)器在更新 emp_sal 列之后激活觸發(fā)器觸發(fā)器限制SQL FOR E
4、ACH ROWWHEN (NEW.empsalOLD.empsal)DECLARESal_diff NUMBER;只有在WHEN子句中的條件得到滿足時,才激活trig_sal 觸發(fā)器觸發(fā)器操作SQL BEGIN sal_diff:=:NEW.empsal-:OLD.empsal; DBMS_OUTPUT.PUT_LINE(工資差額:sal_diff);END;如果WHEN子句中的條件得到滿足,將執(zhí)行BEGIN 塊中的代碼ACCP V4.08觸發(fā)器的組成部分 3-3Oracle 數(shù)據(jù)庫更新表表保存更新激活觸發(fā)器觸發(fā)器AFTER 觸發(fā)器的工作原理BEFORE 觸發(fā)器的工作原理更新表表激活觸發(fā)器觸發(fā)
5、器保存更新Oracle 數(shù)據(jù)庫ACCP V4.09創(chuàng)建觸發(fā)器CREATE OR REPLACE TRIGGER aiu_itemfileAFTER INSERTON itemfileFOR EACH ROWBEGIN IF (:NEW.qty_hand = 0) THEN DBMS_OUTPUT.PUT_LINE(警告:已插入記錄,但數(shù)量為零); ELSE DBMS_OUTPUT.PUT_LINE(已插入記錄); END IF;END;/ACCP V4.010觸發(fā)器類型 6-1q觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)觸發(fā)器DML觸發(fā)器數(shù)據(jù)庫級觸發(fā)器語句級觸發(fā)器行級觸發(fā)器INSTEAD OF觸
6、發(fā)器ACCP V4.011觸發(fā)器類型 6-2q DDL 觸發(fā)器q 數(shù)據(jù)庫級觸發(fā)器q DML 觸發(fā)器q 語句級觸發(fā)器q 行級觸發(fā)器q INSTEAD OF 觸發(fā)器在模式中執(zhí)行 DDL 語句時執(zhí)行在發(fā)生打開、關(guān)閉、登錄和退出數(shù)據(jù)庫等系統(tǒng)事件時執(zhí)行在對表或視圖執(zhí)行DML語句時執(zhí)行無論受影響的行數(shù)是多少,都只執(zhí)行一次對DML語句修改的每個行執(zhí)行一次用于用戶不能直接使用 DML 語句修改的視圖ACCP V4.012觸發(fā)器類型 6-3q行級觸發(fā)器SQL CREATE TABLE TEST_TRG (ID NUMBER, NAME VARCHAR2(20);SQL CREATE SEQUENCE SEQ_T
7、EST;SQL CREATE OR REPLACE TRIGGER BI_TEST_TRGBEFORE INSERT OR UPDATE OF IDON TEST_TRGFOR EACH ROWBEGIN IF INSERTING THEN SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL; ELSE RAISE_APPLICATION_ERROR(-20020, 不允許更新ID值!); END IF;END;/ACCP V4.013觸發(fā)器類型 6-4SQL CREATE OR REPLACE TRIGGER trgdemo AFTER INSERT
8、 OR UPDATE OR DELETE ON order_masterBEGIN IF UPDATING THEN DBMS_OUTPUT.PUT_LINE(已更新 ORDER_MASTER 中的數(shù)據(jù)); ELSIF DELETING THEN DBMS_OUTPUT.PUT_LINE(已刪除 ORDER_MASTER 中的數(shù)據(jù)); ELSIF INSERTING THEN DBMS_OUTPUT.PUT_LINE(已在 ORDER_MASTER 中插入數(shù)據(jù)); END IF;END;/q語句級觸發(fā)器ACCP V4.014觸發(fā)器類型 6-5SQL CREATE OR REPLACE TRIG
9、GER upd_ord_view INSTEAD OF UPDATE ON ord_view FOR EACH ROW BEGIN UPDATE order_master SET vencode=:NEW.vencode WHERE orderno = :NEW.orderno;DBMS_OUTPUT.PUT_LINE(已激活觸發(fā)器); END; /qINSTEAD OF 觸發(fā)器ACCP V4.015觸發(fā)器類型 6-6SQL CREATE TABLE dropped_obj ( obj_name VARCHAR2(30), obj_type VARCHAR2(20), drop_date DA
10、TE);SQL CREATE OR REPLACE TRIGGER log_drop_objAFTER DROP ON SCHEMABEGIN INSERT INTO dropped_obj VALUES( ORA_DICT_OBJ_NAME, ORA_DICT_OBJ_TYPE, SYSDATE);END;/q模式觸發(fā)器ACCP V4.016q啟用和禁用觸發(fā)器q刪除觸發(fā)器啟用、禁用和刪除觸發(fā)器SQL ALTER TRIGGER aiu_item;SQL ALTER TRIGGER aiu_item;SQL DROP TRIGGER aiu_itemfile;ACCP V4.017查看有關(guān)觸發(fā)
11、器的信息SQL SELECT TRIGGER_NAME FROM USER_TRIGGERSWHERE TABLE_NAME=EMP;SQL SELECT TRIGGER_TYPE, TRIGGERING_EVENT, WHEN_CLAUSEFROM USER_TRIGGERSWHERE TRIGGER_NAME = BIU_EMP_DEPTNO;qUSER_TRIGGERS 數(shù)據(jù)字典視圖包含有關(guān)觸發(fā)器的信息ACCP V4.018內(nèi)置程序包 8-1q擴展數(shù)據(jù)庫的功能q為 PL/SQL 提供對 SQL 功能的訪問q用戶 SYS 擁有所有程序包q是公有同義詞q可以由任何用戶訪問ACCP V4.01
12、9內(nèi)置程序包 8-2q一些內(nèi)置程序包:程序包名稱程序包名稱說明說明STANDARD和DBMS_STANDARD定義和擴展PL/SQL語言環(huán)境DBMS_LOB提供對 LOB數(shù)據(jù)類型進行操作的功能DBMS_OUTPUT處理PL/SQL塊和子程序輸出調(diào)試信息DBMS_RANDOM提供隨機數(shù)生成器DBMS_SQL允許用戶使用動態(tài) SQLDBMS_XMLDOM用DOM模型讀寫XML類型的數(shù)據(jù)DBMS_XMLPARSERXML解析,處理XML文檔內(nèi)容和結(jié)構(gòu)DBMS_XMLQUERY提供將數(shù)據(jù)轉(zhuǎn)換為 XML 類型的功能DBMS_XSLPROCESSOR提供XSLT功能,轉(zhuǎn)換XML文檔UTL_FILE用 PL
13、/SQL 程序來讀寫操作系統(tǒng)文本文件ACCP V4.020內(nèi)置程序包 8-3SQL SET SERVEROUTPUT ONSQL BEGIN DBMS_OUTPUT.PUT_LINE(打印三角形); FOR i IN 1.9 LOOP FOR j IN 1.i LOOP DBMS_OUTPUT.PUT(*); END LOOP for_j; DBMS_OUTPUT.NEW_LINE; END LOOP for_i;END;/qDBMS_OUTPUT包顯示 PL/SQL 塊和子程序的調(diào)試信息。ACCP V4.021內(nèi)置程序包 8-4qDBMS_LOB 包提供用于處理大型對象的過程和函數(shù)qDBMS
14、_XMLQUERY 包用于將查詢結(jié)果轉(zhuǎn)換為 XML 格式ACCP V4.022內(nèi)置程序包 8-5SQL DECLARE result CLOB; xmlstr VARCHAR2(32767); line VARCHAR2(2000); line_no INTEGER := 1;BEGIN result := DBMS_XMLQuery.getXml(SELECT empno, ename FROM employee); xmlstr := DBMS_LOB.SUBSTR(result,32767); LOOP EXIT WHEN xmlstr IS NULL; line := SUBSTR(x
15、mlstr,1,INSTR(xmlstr,CHR(10)-1); DBMS_OUTPUT.PUT_LINE(line_no | : | line); xmlstr := SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1); line_no := line_no + 1; END LOOP;END;/ACCP V4.023內(nèi)置程序包 8-6SQL SET SERVEROUTPUT ONSQL DECLARE l_num NUMBER; counter NUMBER;BEGIN counter:=1; WHILE counter CREATE DIRECTORY TEST_
16、DIR AS C:DEVELOP;SQL GRANT READ, WRITE ON DIRECTORY TEST_DIR TO SCOTT;qUTL_FILE 包用于讀寫操作系統(tǒng)文本文件q操作文件的一般過程是打開、讀或?qū)?、關(guān)閉qUTL_FILE 包指定文件路徑依賴于 DIRECTORY 對象ACCP V4.025內(nèi)置程序包 8-8SQL SET SERVEROUTPUT ONSQL DECLARE input_file UTL_; input_buffer VARCHAR2(4000);BEGIN input_ UTL_( TEST_DIR, employees.xml, r); LOOP UTL_(input_); DBMS_OUTPUT.PUT_LINE(input_buffer); END LOOP; UTL_(input_file);EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(-);E
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銑床考試題及答案
- 2025年四川省綿陽市中考歷史二檢試卷(含答案)
- 2025年合同制度對企業(yè)的戰(zhàn)略價值
- 深化家電產(chǎn)品的互聯(lián)網(wǎng)+與物聯(lián)網(wǎng)應(yīng)用
- tert-Butyl-4-hydroxybutanoate-生命科學(xué)試劑-MCE
- Cladosporide-B-生命科學(xué)試劑-MCE
- 2025年考研日語翻譯基礎(chǔ)MTI模擬試卷(含慣用語翻譯)高頻考點解析
- 2025短期辦公室租賃合同示范文本
- 2025網(wǎng)絡(luò)安全服務(wù)合同
- 2025杰出藥品供應(yīng)合同
- 大學(xué)美育知到智慧樹章節(jié)測試課后答案2024年秋德州學(xué)院
- 醫(yī)院培訓(xùn)課件:《多發(fā)性骨髓瘤》
- 西湖寫景作文600字
- 電動車火災(zāi)安全培訓(xùn)課件
- 建筑項目招投標外文翻譯外文文獻英文文獻
- 企業(yè)食品安全知識培訓(xùn)課件
- 【MOOC】中國近現(xiàn)代史綱要-浙江大學(xué) 中國大學(xué)慕課MOOC答案
- 2021年中等職業(yè)學(xué)校學(xué)生學(xué)業(yè)水平考試考務(wù)工作細則(考務(wù)手冊)
- 湖北省黃岡市(2024年-2025年小學(xué)五年級語文)人教版質(zhì)量測試(下學(xué)期)試卷及答案
- 中醫(yī)體質(zhì)養(yǎng)生 期末考試試題及答案
- 世界古代史(二) 講義 高三統(tǒng)編版2019必修中外歷史綱要下冊一輪復(fù)習(xí)
評論
0/150
提交評論