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

正文內容

chap13oracleplsql命名對象-資料下載頁

2025-02-02 19:02本頁面
  

【正文】 作。 78 Oracle數(shù)據(jù)庫應用教程 觸發(fā)器概述 —— 觸發(fā)器組成 ? 觸發(fā)器由觸發(fā)器頭部和觸發(fā)器體兩個部分組成 ? 觸發(fā)器頭部 (觸發(fā)器何時被調用) ? 作用對象:觸發(fā)器作用的對象包括表、視圖、數(shù)據(jù)庫和模式。 ? 觸發(fā)事件:激發(fā)觸發(fā)器執(zhí)行的事件。如 DML、 DDL、數(shù)據(jù)庫系統(tǒng)事件等。 ? 觸發(fā)時間:用于指定觸發(fā)器在觸發(fā)事件完成之前還是之后執(zhí)行。如果指定為 AFTER,則表示先執(zhí)行觸發(fā)事件,然后再執(zhí)行觸發(fā)器;如果指定為 BEFORE,則表示先執(zhí)行觸發(fā)器,然后再執(zhí)行觸發(fā)事件。 79 Oracle數(shù)據(jù)庫應用教程 ? 觸發(fā)級別:觸發(fā)級別用于指定觸發(fā)器響應觸發(fā)事件的方式。默認為語句級觸發(fā)器,即觸發(fā)事件發(fā)生后,觸發(fā)器只執(zhí)行一次。如果指定為 FOR EACH ROW,即為行級觸發(fā)器,則觸發(fā)事件每作用于一個記錄,觸發(fā)器就會執(zhí)行一次。 ? 觸發(fā)條件:由 WHEN子句指定一個邏輯表達式,當觸發(fā)事件發(fā)生,而且 WHEN條件為 TRUE時,觸發(fā)器才會執(zhí)行。 ? 觸發(fā)器體(如何實現(xiàn)復雜的業(yè)務約束) ? 觸發(fā)操作:觸發(fā)器執(zhí)行時所進行的操作。 80 Oracle數(shù)據(jù)庫應用教程 觸發(fā)器的構思、設計、實施與運行 ?為 employees表創(chuàng)建一個觸發(fā)器,禁止在周六、周日以及非工作時間對該表進行DML操作。 81 Oracle數(shù)據(jù)庫應用教程 觸發(fā)器的構思、設計 ?作用對象: ?事件: ?執(zhí)行時間: ?級別: ?業(yè)務約束: INSERT、 UPDATE、 DELETE employees BEFORE 語句級 檢查當前的系統(tǒng)日期是否非周六、周日;系統(tǒng)時間是否在 8:0018:00,如果不符合要求,則禁止該操作的進行。 DML 觸發(fā)器 82 Oracle數(shù)據(jù)庫應用教程 觸發(fā)器的實施 ?DML觸發(fā)器語法 ? CREATE [OR REPLACE] TRIGGER trigger_name ? BEFORE|AFTER triggering_event [OF column_name] ? ON table_name ? [FOR EACH ROW] ? [WHEN trigger_condition] ? DECLARE ? /*Declarative section is here */ ? BEGIN ? /*Exccutable section si here*/ ? EXCEPTION ? /*Exception section is here*/ ? END [trigger_name]。 Trigger_body 83 Oracle數(shù)據(jù)庫應用教程 ? CREATE OR REPLACE TRIGGER trg_secure_emp ? BEFORE ? ON employees ? BEGIN ? IF TO_CHAR (SYSDATE, 39。HH24:MI39。) NOT BETWEEN ? 39。08:0039。 AND 39。18:0039。 OR TO_CHAR (SYSDATE, 39。DY39。, ? 39。NLS_DATE_LANGUAGE=AMERICAN39。) ? IN (39。SAT39。, 39。SUN39。) ? THEN ? RAISE_APPLICATION_ERROR (20235,39。只能在正常的工作時間內進行改變。 39。)。 ? END IF。 ? END trg_secure_emp。 觸發(fā)器的實施 INSERT OR UPDATE OR DELETE 84 Oracle數(shù)據(jù)庫應用教程 ? 如果觸發(fā)器響應多個 DML事件,而且需要根據(jù)事件的不同進行不同的操作,則可以在觸發(fā)器體中使用 3個條件謂詞。 謂詞 行為 INSERTING 如果觸發(fā)語句是 INSERT,則為 TRUE; 否則為 FALSE UPDATING 如果觸發(fā)語句是 UPDATE,則為 TRUE; 否則為 FALSE DELETING 如果觸發(fā)語句是 DELETE,則為 TRUE; 否則為 FALSE 85 Oracle數(shù)據(jù)庫應用教程 ?為 employees表創(chuàng)建一個觸發(fā)器, ?當執(zhí)行插入操作時,統(tǒng)計操作后員工人數(shù); ?當執(zhí)行更新員工工資操作時,統(tǒng)計更新后員工平均工資; ?當執(zhí)行刪除員工操作時,統(tǒng)計刪除后各個部門的員工人數(shù)。 86 Oracle數(shù)據(jù)庫應用教程 ? CREATE OR REPLACE TRIGGER trg_emp_dml ? AFTER INSERT OR UPDATE OR DELETE ON employees ? DECLARE ? v_count NUMBER。 ? v_sal NUMBER(6,2)。 ? BEGIN ? IF INSERTING THEN ? SELECT count(*) INTO v_count FROM employees。 ? (v_count)。 ? ELSIF UPDATING THEN ? SELECT avg(salary) INTO v_sal FROM employees。 ? (v_sal)。 ? ELSE ? FOR v_dept IN (SELECT department_id,count(*) num ? FROM employees GROUP BY department_id) LOOP ? (||39。 39。|| ? )。 ? END LOOP。 ? END IF。 ? END trg_emp_dml。 87 Oracle數(shù)據(jù)庫應用教程 ? 行級觸發(fā)器 ? 行級觸發(fā)器是指執(zhí)行 DML操作時,每操作一個記錄,觸發(fā)器就執(zhí)行一次,一個 DML操作涉及多少個記錄,觸發(fā)器就執(zhí)行多少次。 ? 在行級觸發(fā)器中可以使用 WHEN條件,進一步控制觸發(fā)器的執(zhí)行。 ? 在行級觸發(fā)器中引入了 :old和 :new 兩個標識符,來訪問和操作當前被處理記錄中的數(shù)據(jù)。 88 Oracle數(shù)據(jù)庫應用教程 ? 標識符 ? :old和 :new作為 triggering_table%ROWTYPE類型的兩個變量 ? 在不同觸發(fā)事件中, :old和 :new的意義不同 觸發(fā)事件 :old :new INSERT 未定義,所有字段都為NULL 當語句完成時,被插入的記錄 UPDATE 更新前原始記錄 當語句完成時,更新后的記錄 DELETE 記錄被刪除前的原始值 未定義,所有字段都為 NULL 89 Oracle數(shù)據(jù)庫應用教程 ? 引用方式 : : : (執(zhí)行部分) 和 (WHEN條件中 ) ? 注意事項: ? 是偽記錄,不能作為整個記錄進行賦值或引用 ? 不能傳遞給帶 triggering_table%ROWTYPE參數(shù)的過程和函數(shù) ? 如果觸發(fā)器是建立在嵌套表上, 。old和 。new都執(zhí)行嵌套表的行, :parent指向父表中的當前行。 90 Oracle數(shù)據(jù)庫應用教程 ?為 employees表創(chuàng)建一個觸發(fā)器,當插入新員工時顯示新員工的員工號、員工名;當更新員工工資時,顯示修改前后員工工資;當刪除員工時,顯示被刪除的員工號、員工名。 91 Oracle數(shù)據(jù)庫應用教程 ? CREATE OR REPLACE TRIGGER trg_emp_dml_row ? BEFORE INSERT OR UPDATE OR DELETE ? ON employees ? FOR EACH ROW ? BEGIN ? IF INSERTING THEN ? (:||39。 39。|| ? :||39。 39。||:)。 ? ELSIF UPDATING THEN ? (:||39。 39。||:)。 ? ELSE ? (:||39。 39。|| ? :||39。 39。||:)。 ? END IF。 ? END trg_emp_dml_row。 92 Oracle數(shù)據(jù)庫應用教程 ?為 EMPLOYEES表創(chuàng)建觸發(fā)器,保證插入新員工或修改員工工資時,員工的最新工資在其工作職位所允許的工資范圍之內。 93 Oracle數(shù)據(jù)庫應用教程 ? CREATE OR REPLACE TRIGGER trg_dml_emp_salary ? AFTER INSERT OR UPDATE OF salary ? ON employees ? FOR EACH ROW ? DECLARE ? v_maxsal %type。 ? v_minsal %type。 ? BEGIN ? SELECT max_salary,min_salary INTO v_maxsal,v_minsal ? FROM jobs WHERE job_id=:。 ? IF : NOT BETWEEN v_minsal AND v_maxsal ? THEN ? RAISE_APPLICATION_ERROR(20230, ? 39。The salary is not between 39。||v_minsal||39。 AND 39。||v_maxsal)。 ? END IF。 ? END trg_dml_emp_salary。 94 Oracle數(shù)據(jù)庫應用教程 ? 為 EMPLOYEES表創(chuàng)建觸發(fā)器,當員工職位變動或部門變動時,相關信息寫入 job_history表 。 ? CREATE OR REPLACE TRIGGER trg_update_job_history ? AFTER UPDATE OF job_id, department_id ? ON employees ? FOR EACH ROW ? BEGIN ? INSERT INTO job_history ? VALUES(:,:, sysdate, ? :, :)。 ? END trg_update_job_history。 95 Oracle數(shù)據(jù)庫應用教程 ? 在行級觸發(fā)器中,可以使用 WHEN子句進一步控制觸發(fā)器的執(zhí)行。 ? 例如,修改員工工資時,保證修改后的工資高于修改前的工資。 ? CREATE OR REPLACE TRIGGER trg_emp_update_row ? BEFORE UPDATE OF salary ? ON employees ? FOR EACH ROW ? WHEN(=) ? BEGIN ? RAISE_APPLICATION_ERROR(20231, ? 39。The salary is lower! 39。)。 ? END trg_emp_update_row。 96 Oracle數(shù)據(jù)庫應用教程 ( 2) DML觸發(fā)器的種類及執(zhí)行順序 ?DML觸發(fā)器的種類 ?語句級前觸發(fā)器 ?語句級后觸發(fā)器 ?行級前觸發(fā)器 ?行級后觸發(fā)器 97 Oracle數(shù)據(jù)庫應用教程 ? DML觸發(fā)器的執(zhí)行順序 ?如果存在,則執(zhí)行語句級前觸發(fā)器。 ?對于受觸發(fā)事件影響的每一個記錄: ?如果存在,則執(zhí)行行級前觸發(fā)器; ?執(zhí)行當前記錄的 DML操作(觸發(fā)事件); ?如果存在,則執(zhí)行行級后觸發(fā)器。 ?如果存在,則執(zhí)行語句級后觸發(fā)器。 98 Oracle數(shù)據(jù)庫應用教程 OF觸發(fā)器 ? 特點 ? 只能定義在視圖上 ? Insteadof觸發(fā)器是行級觸發(fā)器 ? Insteadof 觸發(fā)器由 DML操作激發(fā),而 DML操作本身并不執(zhí)行 ? 作用 ? 修改一個本來不可以修改的視圖 ? 修改視圖中某嵌套表列的列 99 Oracle數(shù)據(jù)庫應用教程 ? 如果視圖中包含下列任何一項 , 則該視圖不可修改 ? 集合操作符 ( UNION, UNION ALL, MINUS,INTERSECT); ? 聚集函數(shù)( SUM, AVG等); ? GROUP BY, CONNECT BY或 START WITH子句; ? DISTINCT操作符; ? 涉及多個表的連接操作。 100
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1