




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第6章章 子程序和觸發(fā)器子程序和觸發(fā)器理論部分理論部分本章目標(biāo) 學(xué)會(huì)在Oracle中使用過(guò)程 學(xué)會(huì)在Oracle中使用函數(shù) 學(xué)會(huì)在Oracle中使用包 掌握觸發(fā)器的使用子程序 子程序是已命名的PL/SQL塊,它們存儲(chǔ)在數(shù)據(jù)庫(kù)中,可以為它們指定參數(shù),可以從任何數(shù)據(jù)庫(kù)客戶端和應(yīng)用程序中調(diào)用它們 子程序包括存儲(chǔ)過(guò)程和函數(shù) 使用存儲(chǔ)過(guò)程執(zhí)行操作,使用函數(shù)執(zhí)行操作并返回值,就像應(yīng)用程序中的方法 子程序具有聲明部分、可執(zhí)行部分、異常部分(可選)過(guò)程 過(guò)程是用于完成特定任務(wù)的子程序 例如:前往售票廳詢問(wèn)關(guān)于車票的信息 排隊(duì)等候 在柜臺(tái)購(gòu)買車票 子程序過(guò)程定義CREATE OR REPLACE PROCED
2、URE 過(guò)程名(參數(shù)) IS|AS -聲明部分 BEGIN -可執(zhí)行部分EXCEPTION -異常處理部分END 過(guò)程名; 過(guò)程CREATE OR REPLACE PROCEDURE find_emp(emp_no NUMBER)AS empname VARCHAR2(20);BEGIN SELECT ename INTO empname FROM EMP WHERE empno = emp_no; DBMS_OUTPUT.PUT_LINE(雇員姓名是 | empname);EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE (雇員編號(hào)
3、未找到);END find_emp;/子程序過(guò)程調(diào)用命令行調(diào)用:EXECUTE 過(guò)程名(參數(shù))子程序調(diào)用:過(guò)程名(參數(shù))子程序 調(diào)用函數(shù)SQL SET SERVEROUTPUT ONSQL EXECUTE find_emp (7369);DECLAREvalue1 NUMBER:=7369;BEGIN find_emp(value1);END;子程序參數(shù)類型INOUTIN OUT子程序SQL CREATE OR REPLACE PROCEDURE test( value1 IN VARCHAR2, value2 OUT NUMBER )IS identity NUMBER;BEGIN SELE
4、CT ITEMRATE INTO identity FROM itemFile WHERE itemcode = value1; IF identity SET SERVEROUT ONSQL DECLARE num1 NUMBER := 100; num2 NUMBER := 200;BEGIN swap(num1, num2); DBMS_OUTPUT.PUT_LINE(num1 = | num1); DBMS_OUTPUT.PUT_LINE(num2 = | num2);END;/12過(guò)程 將過(guò)程的執(zhí)行權(quán)限授予其他用戶: 刪除過(guò)程:SQL GRANT EXECUTE ON find_em
5、p TO MARTIN;SQL GRANT EXECUTE ON swap TO PUBLIC;SQL DROP PROCEDURE find_emp;子程序函數(shù)定義CREATE OR REPLACE FUNCTION 函數(shù)名(過(guò)程參數(shù)列表) RETURN 數(shù)據(jù)類型 IS|AS -聲明部分 BEGIN -可執(zhí)行部分EXCEPTION -異常處理部分END 函數(shù)名; 函數(shù) 創(chuàng)建函數(shù): 從 SQL 語(yǔ)句調(diào)用函數(shù):CREATE OR REPLACE FUNCTION fun_hello RETURN VARCHAR2ISBEGIN RETURN 朋友,您好;END;/SQL SELECT fun_h
6、ello FROM DUAL;15函數(shù) CREATE OR REPLACE FUNCTION item_price_range (price NUMBER) RETURN VARCHAR2 AS min_price NUMBER; max_price NUMBER;BEGIN SELECT MAX(ITEMRATE), MIN(ITEMRATE) INTO max_price, min_price FROM itemfile; IF price = min_price AND price CREATE OR REPLACE TRIGGER trig_salAFTER UPDATE OF emp
7、sal ON salary_records觸發(fā)器語(yǔ)句為 salary_records 表創(chuàng)建 trig-sal 觸發(fā)器在更新 emp_sal 列之后激活觸發(fā)器觸發(fā)器限制SQL FOR EACH ROWWHEN (NEW.empsalOLD.empsal)DECLARESal_diff NUMBER;只有在WHEN子句中的條件得到滿足時(shí),才激活trig_sal 觸發(fā)器觸發(fā)器操作SQL BEGIN sal_diff:=:NEW.empsal-:OLD.empsal; DBMS_OUTPUT.PUT_LINE(工資差額:sal_diff);END;如果WHEN子句中的條件得到滿足,將執(zhí)行BEGIN
8、塊中的代碼觸發(fā)器的組成部分 3-3Oracle 數(shù)據(jù)庫(kù)更新表表保存更新激活觸發(fā)器觸發(fā)器AFTER 觸發(fā)器的工作原理BEFORE 觸發(fā)器的工作原理更新表表激活觸發(fā)器觸發(fā)器保存更新Oracle 數(shù)據(jù)庫(kù)創(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;/觸發(fā)器類型
9、觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)觸發(fā)器DML觸發(fā)器數(shù)據(jù)庫(kù)級(jí)觸發(fā)器語(yǔ)句級(jí)觸發(fā)器行級(jí)觸發(fā)器INSTEAD OF觸發(fā)器觸發(fā)器類型q DDL 觸發(fā)器q 數(shù)據(jù)庫(kù)級(jí)觸發(fā)器q DML 觸發(fā)器q 語(yǔ)句級(jí)觸發(fā)器q 行級(jí)觸發(fā)器q INSTEAD OF 觸發(fā)器在模式中執(zhí)行 DDL 語(yǔ)句時(shí)執(zhí)行在發(fā)生打開、關(guān)閉、登錄和退出數(shù)據(jù)庫(kù)等系統(tǒng)事件時(shí)執(zhí)行在對(duì)表或視圖執(zhí)行DML語(yǔ)句時(shí)執(zhí)行無(wú)論受影響的行數(shù)是多少,都只執(zhí)行一次對(duì)DML語(yǔ)句修改的每個(gè)行執(zhí)行一次用于用戶不能直接使用 DML 語(yǔ)句修改的視圖觸發(fā)器類型 行級(jí)觸發(fā)器SQL CREATE TABLE TEST_TRG (ID NUMBER, NAME VARCHAR2(2
10、0);SQL CREATE SEQUENCE SEQ_TEST;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;/觸發(fā)器類型SQL CREATE OR REPLACE TRIGGER trgdemo
11、 AFTER INSERT 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;/ 語(yǔ)句級(jí)觸發(fā)器觸發(fā)器類型SQL CREATE OR REPLACE TRIGGE
12、R 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; / INSTEAD OF 觸發(fā)器33觸發(fā)器類型SQL CREATE TABLE dropped_obj ( obj_name VARCHAR2(30), obj_type VARCHAR2(20), drop_date DATE);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;/ 模式觸發(fā)器觸發(fā)器管理觸發(fā)器 語(yǔ)法:ALTER TRIGGER 觸發(fā)器名稱 ENABLE|DISABLE禁用一張表上的所有觸發(fā)器ALTER TABLE 表名
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 便利蜂倉(cāng)庫(kù)收貨作業(yè)考試試題
- 環(huán)境管理體系培訓(xùn)
- 家具行業(yè)培訓(xùn)
- 《高端住宅市場(chǎng)洞察》課件
- 中職經(jīng)濟(jì)政治與社會(huì)課程教學(xué)大綱
- 服裝合作協(xié)議書
- 服裝商品知識(shí)培訓(xùn)
- 車輛貸款公司合同協(xié)議
- 關(guān)于供應(yīng)商合作協(xié)議的溝通函
- 產(chǎn)品委托代理銷售合同書
- 3D數(shù)字游戲藝術(shù)-2-測(cè)量分評(píng)分表-3D建模-30分
- 髖關(guān)節(jié)內(nèi)固定術(shù)后護(hù)理
- 風(fēng)電基礎(chǔ)施工方案
- 換濾芯合同(2篇)
- 第01講 力、重力、彈力(解析版)-2024全國(guó)初中物理競(jìng)賽試題編選
- 2024至2030年中國(guó)1200伏碳化硅MOSFET市場(chǎng)現(xiàn)狀研究分析與發(fā)展前景預(yù)測(cè)報(bào)告
- 公司廢舊物資移交清單
- 建筑工地 施工現(xiàn)場(chǎng) 禁止飲酒 協(xié)議書
- ICD-10疾病編碼完整版
- 肩關(guān)節(jié)超聲檢查
- 畢業(yè)論文-中小企業(yè)防火墻的應(yīng)用
評(píng)論
0/150
提交評(píng)論