<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    在寫trigger的時候,經常會遇到這種情況
    當在程序塊中需要對trigger本表進行修改或查詢的時候,系統會提示錯誤:  ORA-04091: table is mutating, trigger/function may not see it

    關于這個錯誤,其實是由于對本表的操作造成的.ORACLE DB里默認在寫TRIGGER的時候把本表鎖死,不允許對其進行操作,也就是說這個錯誤是不能通過系統的手段解決的,只能改用一些其它的SQL來繞開它.

    對此可通過自治事物解決:

    SQL> CREATE TABLE T(ID NUMBER(18),MC VARCHAR2(20),DT DATE);

    表已創建。

    SQL> CREATE OR REPLACE TRIGGER TR_T
      2  AFTER DELETE ON T
      3  FOR EACH ROW
      4  DECLARE V_COUNT NUMBER;
      5  --PRAGMA AUTONOMOUS_TRANSACTION;
      6  BEGIN
      7     INSERT INTO T VALUES(:OLD.ID,:OLD.MC,SYSDATE);
      8     COMMIT;
      9  END TR_DEL_CABLE;
    10  /

    觸發器已創建

    SQL> INSERT INTO T VALUES(1,'111111',SYSDATE);

    已創建 1 行。

    SQL> INSERT INTO T VALUES(2,'222222',SYSDATE);

    已創建 1 行。

    SQL> COMMIT;

    提交完成。

    SQL> SELECT ID,MC,TO_CHAR(DT,'YYYYMMDD HH24:MI:SS') FROM T;

            ID MC                   TO_CHAR(DT,'YYYYM
    ---------- -------------------- -----------------
             1 111111               20080802 11:07:36
             2 222222               20080802 11:07:43

    SQL> DELETE FROM T WHERE ID=1;
    DELETE FROM T WHERE ID=1
                *
    第 1 行出現錯誤:
    ORA-04091: 表 TEST.T 發生了變化, 觸發器/函數不能讀它
    ORA-06512: 在 "TEST.TR_T", line 4
    ORA-04088: 觸發器 'TEST.TR_T' 執行過程中出錯


    SQL> SELECT ID,MC,TO_CHAR(DT,'YYYYMMDD HH24:MI:SS') FROM T;

            ID MC                   TO_CHAR(DT,'YYYYM
    ---------- -------------------- -----------------
             1 111111               20080802 11:07:36
             2 222222               20080802 11:07:43

    SQL> CREATE OR REPLACE TRIGGER TR_T
      2  AFTER DELETE ON T
      3  FOR EACH ROW
      4  DECLARE V_COUNT NUMBER;
      5  PRAGMA AUTONOMOUS_TRANSACTION;--開啟自治事物
      6  BEGIN
      7     INSERT INTO T VALUES(:OLD.ID,:OLD.MC,SYSDATE);
      8     COMMIT;--提交自治事物
      9  END TR_DEL_CABLE;
    10  /

    觸發器已創建

    SQL> DELETE FROM T WHERE ID=1;

    已刪除 1 行。

    SQL> COMMIT;

    提交完成。

    SQL> SELECT ID,MC,TO_CHAR(DT,'YYYYMMDD HH24:MI:SS') FROM T;

            ID MC                   TO_CHAR(DT,'YYYYM
    ---------- -------------------- -----------------
             2 222222               20080802 11:07:43
             1 111111               20080802 11:08:32

     

    posted on 2010-02-04 18:22 小菜毛毛 閱讀(6596) 評論(0)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 亚洲精品视频免费看| 97性无码区免费| 亚洲精品亚洲人成在线观看麻豆| 日本免费一区二区在线观看| 亚洲人成网亚洲欧洲无码| 亚洲人成网站色在线入口| 精品无码国产污污污免费网站| 亚洲高清一区二区三区| 亚洲香蕉网久久综合影视| 日本zzzzwww大片免费| 午夜不卡AV免费| 亚洲一区二区影视| 国产AV无码专区亚洲AWWW| 国国内清清草原免费视频99| 亚洲视频在线免费| 久久国产亚洲精品| 亚洲av无码不卡| 婷婷亚洲天堂影院| 很黄很黄的网站免费的| 巨胸喷奶水视频www免费视频| 亚洲三级在线播放| 亚洲人成网77777亚洲色| 免费毛片网站在线观看| 18禁止看的免费污网站| 精品久久久久久无码免费| 亚洲高清视频在线| 亚洲的天堂av无码| 中文字幕精品亚洲无线码一区应用| 18禁成年无码免费网站无遮挡| 污视频在线观看免费| 特级毛片全部免费播放| 2020天堂在线亚洲精品专区| 久久久亚洲精品无码| 亚洲精品视频在线观看你懂的| 成人午夜大片免费7777| 1000部拍拍拍18勿入免费视频软件| 成人免费av一区二区三区| 美女被爆羞羞网站在免费观看| 亚洲日本天堂在线| 亚洲国产成人精品激情| 91亚洲精品视频|