<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)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 亚洲精品mv在线观看| 最近中文字幕免费mv视频7| 亚洲福利视频一区二区| 豆国产96在线|亚洲| 麻豆国产入口在线观看免费| 亚洲中文字幕精品久久| 日韩免费无码一区二区视频| 亚洲自偷自偷在线成人网站传媒| 18禁网站免费无遮挡无码中文 | 成人免费午夜在线观看| 久久精品亚洲AV久久久无码| 日韩欧美一区二区三区免费观看| 亚洲自国产拍揄拍| 麻豆成人精品国产免费| 日韩免费高清一级毛片| 久久亚洲AV永久无码精品| 久久国产乱子伦精品免费强| 亚洲日本中文字幕区| 4hu四虎最新免费地址| 亚洲日韩av无码中文| 亚洲精品人成无码中文毛片| 99视频在线免费观看| 亚洲综合久久1区2区3区| 歪歪漫画在线观看官网免费阅读| 亚洲AV无码专区亚洲AV桃| 国产成人亚洲综合| 99视频免费观看| 亚洲av无码无线在线观看 | 在线jlzzjlzz免费播放| 青青久久精品国产免费看| 久久青青草原亚洲AV无码麻豆| 午夜性色一区二区三区免费不卡视频| 亚洲日韩精品无码专区加勒比☆| 亚洲av无码成人精品区| 性xxxx视频免费播放直播 | 亚洲人配人种jizz| 伊人久久大香线蕉亚洲五月天 | 色天使亚洲综合一区二区| 黑人精品videos亚洲人| 夜夜爽免费888视频| 国产一级片免费看|