世事如棋
          Aspire to Professionalism
          posts - 4,  comments - 12,  trackbacks - 0
          這個是jrlee在帖子中轉載的關于DUAL的東西
          看看這個可以對DUAL有個更深入的了解
          引用:原帖由?"jrlee"?發表:

          神秘的DUAL?black_snail(原作)?

          關鍵字?ORACLE?DUAL?


          DUAL???有什么神秘的??當你想得到ORACLE系統時間,?簡簡單單敲一行SQL?

          不就得了嗎??故弄玄虛….?

          SQL>;?select?sysdate?from?dual;?

          SYSDATE?

          ---------?

          28-SEP-03?



          哈哈,?確實DUAL的使用很方便.?但是大家知道DUAL倒底是什么OBJECT,?它有什么特殊的行為嗎??來,我們一起看一看.?



          首先搞清楚DUAL是什么OBJECT?:?

          SQL>;?connect?system/manager?

          Connected.?

          SQL>;?select?owner,?object_name?,?object_type?from?dba_objects?where?object_name?like?'%DUAL%';?



          OWNER?OBJECT_NAME?OBJECT_TYPE?

          ---------------?---------------?-------------?

          SYS?DUAL?TABLE?

          PUBLIC?DUAL?SYNONYM?



          原來DUAL是屬于SYS?schema的一個表,然后以PUBLIC?SYNONYM的方式供其他數據庫USER使用.?

          再看看它的結構:?

          SQL>;?desc?dual?

          Name?Null??Type?

          -----------------------------------------?--------?----------------------------?

          DUMMY?VARCHAR2(1)?



          SQL>;?



          只有一個名字叫DUMMY的字符型COLUMN?.?



          然后查詢一下表里的數據:?

          SQL>;?select?dummy?from?dual;?

          DUMMY?

          ----------?

          X?



          哦,?只有一條記錄,?DUMMY的值是’X’?.很正常啊,沒什么奇怪嘛.?好,下面就有奇妙的東西出現了!?

          插入一條記錄:?

          SQL>;?connect?sys?as?sysdba?

          Connected.?

          SQL>;?insert?into?dual?values?(?'Y');?

          1?row?created.?

          SQL>;?commit;?

          Commit?complete.?

          SQL>;?select?count(*)?from?dual;?

          COUNT(*)?

          ----------?

          2?

          迄今為止,一切正常.?然而當我們再次查詢記錄時,奇怪的事情發生了?

          SQL>;?select?*?from?dual;?

          DUMMY?

          ----------?

          X?

          剛才插入的那條記錄并沒有顯示出來?!?明明DUAL表中有兩條記錄,?可就是只顯示一條!?

          再試一下刪除?,狠一點,全刪光?!?

          SQL>;?delete?from?dual;?/*注意沒有限定條件,試圖刪除全部記錄*/?

          1?row?deleted.?

          SQL>;?commit;?

          Commit?complete.?



          哈哈,也只有一條記錄被刪掉,?

          SQL>;?select?*?from?dual;?

          DUMMY?

          ----------?

          Y?



          為什么會這樣呢??難道SQL的語法對DUAL不起作用嗎?帶著這個疑問,?我查詢了一些ORACLE官方的資料.?原來ORACLE對DUAL表的操作做了一些內部處理,盡量保證DUAL表中只返回一條記錄.當然這寫內部操作是不可見的?.?

          看來ORACLE真是蘊藏著無窮的奧妙啊!?



          附:?ORACLE關于DUAL表不同尋常特性的解釋?

          There?is?internalized?code?that?makes?this?happen.?Code?checks?that?ensure?

          that?a?table?scan?of?SYS.DUAL?only?returns?one?row.?Svrmgrl?behaviour?is?

          incorrect?but?this?is?now?an?obsolete?product.?

          The?base?issue?you?should?always?remember?and?keep?is:?DUAL?table?should?always?

          have?1?ROW.?Dual?is?a?normal?table?with?one?dummy?column?of?varchar2(1).?

          This?is?basically?used?from?several?applications?as?a?pseudo?table?for?

          getting?results?from?a?select?statement?that?use?functions?like?sysdate?or?other?

          prebuilt?or?application?functions.?If?DUAL?has?no?rows?at?all?some?applications?

          (that?use?DUAL)?may?fail?with?NO_DATA_FOUND?exception.?If?DUAL?has?more?than?1?

          row?then?applications?(that?use?DUAL)?may?fail?with?TOO_MANY_ROWS?exception.?

          So?DUAL?should?ALWAYS?have?1?and?only?1?row



          posted on 2006-05-12 10:17 KingWell 閱讀(165) 評論(0)  編輯  收藏 所屬分類: Hibernate

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          歡迎訪問我的網站
          JSF中國

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          我的資源

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 北流市| 金阳县| 天台县| 盘锦市| 石家庄市| 三门峡市| 甘泉县| 黄平县| 西安市| 奇台县| 调兵山市| 东丽区| 孟连| 沙湾县| 遵义县| 油尖旺区| 兰溪市| 永新县| 寻乌县| 锦州市| 黔南| 平顶山市| 当阳市| 故城县| 灵山县| 通榆县| 攀枝花市| 新巴尔虎左旗| 方正县| 菏泽市| 宁陕县| 台东县| 崇仁县| 郸城县| 凯里市| 仁化县| 广丰县| 罗源县| 洮南市| 逊克县| 长岭县|