<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不要亂動dual表

            今天在itpub上看到一個帖子,在刪除表的時候出現問題:

      SQL> drop table t4;
      drop table t4
      *
      ERROR at line 1:
      ORA-00604: error occurred at recursive SQL level 1
      ORA-01422: exact fetch returns more than requested number of rows

            通常來說 drop table 失敗的原因都是權限不足,但這次卻報遞歸SQL出錯,咋看讓人摸不著頭腦,隨著版主的分析終于揭開了這個謎底——動了 dual 表。

            以下是我的實驗過程重演這個問題。

       

            首先以一個測試用戶(我這里是scott)創建一個普通表:

      scott@ora10g(oracle01) SQL> create table tab01(f01 int); 
      
      Table created.

            以 sys 用戶向 dual 插入一條數據,并提交:

      sys@ora10g(oracle01) SQL> insert into dual values('Y');
      
      1 row created.
      
      sys@ora10g(oracle01) SQL> commit; 
      
      Commit complete.

            由于一些內部的實現,以下是 dual 比較怪異的情況:

      sys@ora10g(oracle01) SQL> select * from dual ; 
      
      D
      -
      X
      
      sys@ora10g(oracle01) SQL> select count(*) from dual  ;      
      
        COUNT(*)
      ----------
               1
      
      sys@ora10g(oracle01) SQL> begin 
        2  for x in (select * from dual) loop
        3    dbms_output.put_line(x.dummy);
        4  end loop;
        5  end;
        6  /
      X
      Y

            可以看到只有匿名過程返回的結果才是兩條數據。

            此時以scott用戶刪除之前創建的測試表 tab01,即可觸發帖子里面的問題:

      scott@ora10g(oracle01) SQL> drop table tab01 ; 
      drop table tab01
      *
      ERROR at line 1:
      ORA-00604: error occurred at recursive SQL level 1
      ORA-01422: exact fetch returns more than requested number of rows

            做一個級別為12的10046跟蹤,嘗試找出問題:

      scott@ora10g(oracle01) SQL> alter session set tracefile_identifier='drop_table_error'; 
      
      Session altered.
      
      scott@ora10g(oracle01) SQL> alter session set events'10046 trace name context forever,level 12';
      
      Session altered.
      
      scott@ora10g(oracle01) SQL> drop table tab01 ; 
      drop table tab01
      *
      ERROR at line 1:
      ORA-00604: error occurred at recursive SQL level 1
      ORA-01422: exact fetch returns more than requested number of rows
      
      scott@ora10g(oracle01) SQL> alter session set events '10046 trace name context off';

            經過 tkprof 處理后,可以找到為一個引用了 dual 的地方:

      select dummy 
      from
       dual where  ora_dict_obj_type = 'TABLE'
      ......
      ......
      Rows     Row Source Operation
      -------  ---------------------------------------------------
            2  FILTER  (cr=212 pr=2 pw=0 time=32261 us)
            2   TABLE ACCESS FULL DUAL (cr=3 pr=0 pw=0 time=0 us)

             刪除了 dual 表中“多余”行后卻是:

      select dummy 
      from
       dual where  ora_dict_obj_type = 'TABLE'
      ......
      ......
      Rows     Row Source Operation
      -------  ---------------------------------------------------
            1  FILTER  (cr=107 pr=0 pw=0 time=17082 us)
            1   TABLE ACCESS FULL DUAL (cr=3 pr=0 pw=0 time=0 us)

            當然 drop table 也沒有再出錯了。

      posted @ 2010-10-03 23:47  killkill  閱讀(1210)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 日本乱码在线看亚洲乱码| 99久久99这里只有免费费精品| 国产第一页浮力影院入口| 宁河县| 日韩人妻不卡一区二区三区| 亚洲国产成人综合自在线| 中文字幕日韩精品亚洲一区| 亚洲顶级裸体av片| av小次郎网站| 欧美牲交videossexeso欧美| 精品久久人人妻人人做精品| 久久综合九色综合97婷婷| 美女禁区a级全片免费观看| 国产精品亚洲综合色区丝瓜| 国产精品成人免费视频网站京东| 99久久亚洲综合网精品| 宅男久久精品国产亚洲av麻豆| 湘潭市| free性开放小少妇| 东京热大乱系列无码| 最近中文国语字幕在线播放| 粉嫩av蜜臀一区二区三区| 亚洲一区二区三区丝袜| 黑人巨大亚洲一区二区久| 国产成人精品久久一区二区| 乱60一70归性欧老妇| 大又大又粗又硬又爽少妇毛片| 国产精品一区免费在线看| 免费国产女王调教在线视频| 精品国产成人午夜福利| 成在人线AV无码免观看| 成人自拍短视频午夜福利| 国产色无码专区在线观看| 最近中文字幕完整版hd| 国产成人精品电影在线观看| 18禁国产一区二区三区| 麻豆a级片| 午夜福利在线观看入口| 中文字幕第一页国产| 日本夜爽爽一区二区三区| 亚洲精品自拍在线视频|