• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試數據數中Oracle觸發器語法及實例

    發布: 2010-10-18 09:35 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 94次 | 進入軟件測試論壇討論

    領測軟件測試網

    軟件測試數據數中Oracle觸發器語法及實例

    oracle是殷墟(Yin Xu)出土的甲骨文(oracle bone inscriptions)的英文翻譯的第一個單詞,在英語里是“神諭”的意思。Oracle是世界領先的信息管理軟件開發商,因其復雜的關系數據庫產品而聞名。Oracle數據庫產品為財富排行榜上的前1000家公司所采用,許多大型網站也選用了Oracle系統。
    一 Oracle觸發器語法
      觸發器是特定事件出現的時候,自動執行的代碼塊。類似于存儲過程,觸發器與存儲過程的區別在于:存儲過程是由用戶或應用程序顯式調用的,而觸發器是不能被直接調用的。

      功能:

      1、 允許/限制對表的修改

      2、 自動生成派生列,比如自增字段

      3、 強制數據一致性

      4、 提供審計和日志記錄

      5、 防止無效的事務處理

      6、 啟用復雜的業務邏輯

      觸發器觸發時間有兩種:after和before。

      1、觸發器的語法:

      CREATE [OR REPLACE] TIGGER觸發器名 觸發時間 觸發事件

      ON表名

      [FOR EACH ROW]

      BEGIN

      pl/sql語句

      END

      其中:

      觸發器名:觸發器對象的名稱。

      由于觸發器是數據庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途。

      觸發時間:指明觸發器何時執行,該值可。

      before—表示在數據庫動作之前觸發器執行;

      after—表示在數據庫動作之后出發器執行。

      觸發事件:指明哪些數據庫動作會觸發此觸發器:

      insert:數據庫插入會觸發此觸發器;

      Oracle觸發器語法(二)Oracle觸發器詳解

      update:數據庫修改會觸發此觸發器;

      delete:數據庫刪除會觸發此觸發器。

      表 名:數據庫觸發器所在的表。

      for each row:對表的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。

      2、舉例:

      下面的觸發器在更新表auths之前觸發,目的是不允許在周末修改表:

      create triggerauth_secure before insert or update or delete //對整表更新前觸發

      on auths

      begin

      if(to_char(sysdate,’DY’)=’SUN’

      RAISE_APPLICATION_ERROR(-20600,’不能在周末修改表auths’);

      end if;

      end

      例子:

      CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME

      ON CRM.T_SUB_USERINFO

      REFERENCING OLD AS OLD NEW AS NEW

      FOR EACH ROW

      declare

      begin

      if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then

      begin

      客戶投訴:

      update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED;

      客戶關懷

      update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW.STAFF_NAME where EXECUTOR_SEED=:OLD.SEED;

      客戶服務

      update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW.STAFF_NAME

      where EXECUTOR_SEED=:OLD.SEED;

      end;

      end if;

      end T_sub_userinfo_aur_name;

      /

      二

      開始:

      create triggerbiufer_employees_department_id

      beforeinsertorupdateofdepartment_idonemployees

      referencingoldasold_value newasnew_value

      for each row

      when (new_value.department_id<>80 )

      begin

      :new_value.commission_pct :=0;

      end;

      /

      1、觸發器的組成部分:

      1、 觸發器名稱

      2、 觸發語句

      3、 觸發器限制

      4、 觸發操作

      1.1、觸發器名稱

      create trigger biufer_employees_department_id

      命名習慣:

      biufer(before insert update for each row)

      employees表名

      department_id列名

      1.2、觸發語句

      比如:

      表或視圖上的DML語句

      DDL語句

      Oracle觸發器語法(四)

      數據庫關閉或啟動,startup shutdown等等

      before insert or update

      of department_id

      on employees

      referencing old as old_value

      new as new_value

      for each row

      說明:

      1、 無論是否規定了department_id,對employees表進行insert的時候

      2、 對employees表的department_id列進行update的時候

      1.3、觸發器限制

      when (new_value.department_id<>80 )

      限制不是必須的。此例表示如果列department_id不等于80的時候,觸發器就會執行。

      其中的new_value是代表更新之后的值。

      1.4、觸發操作

      是觸發器的主體

      begin

      :new_value.commission_pct :=0;

      end;

      主體很簡單,就是將更新后的commission_pct列置為0

      觸發:

      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,

      department_id,salary,commission_pct )

      values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

      select commission_pct from employees where employee_id=12345;

      觸發器不會通知用戶,便改變了用戶的輸入值。Oracle觸發器語法(四)

      數據庫關閉或啟動,startup shutdown等等

      before insert or update

      of department_id

      on employees

      referencing old as old_value

      new as new_value

      for each row

      說明:

      1、 無論是否規定了department_id,對employees表進行insert的時候

      2、 對employees表的department_id列進行update的時候

      1.3、觸發器限制

      when (new_value.department_id<>80 )

      限制不是必須的。此例表示如果列department_id不等于80的時候,觸發器就會執行。

      其中的new_value是代表更新之后的值。

      1.4、觸發操作

      是觸發器的主體

      begin

      :new_value.commission_pct :=0;

      end;

      主體很簡單,就是將更新后的commission_pct列置為0

      觸發:

      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,

      department_id,salary,commission_pct )

      values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

      select commission_pct from employees where employee_id=12345;

      觸發器不會通知用戶,便改變了用戶的輸入值。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: oracle Oracle ORACLE 觸發器 軟件測試 實例 語法


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>