【原創】Oracle10g dual表的研究
平臺:WinXP SP2
資料庫版本:10.2.0.1
dual表在Oracle資料庫中經常會被使用,只要是在獲取並沒有實際存在於表裡的資料時,起到了一個“偽表”的作用。如:
SQL>select sysdate from dual;
SYSDATE
------------
16-APR-08
我們來看看dual表裡到底存放了什麼資料。可以看到dual表它只包行一條記錄:
SQL>desc dual
Name Null? Type
-------------------------- -------- ------------------------------------
DUMMY VARCHAR2(1)
SQL>select * from dual;
D
-
X
我們來看看資料字典裡的dual到底是什麼樣的表。它實際是SYS使用者下的一張表,並且建立了public synonym供所有資料庫的所有使用者使用。
SQL>col object_name for a20
SQL>select owner, object_name , object_type from dba_objects where object_name ='DUAL';
OWNER OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------- -------------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM
但dual表與其他表相比,有一些獨特的地方,具體的實驗如下:
A、insert操作:
1、insert一條記錄到dual,可以看到insert操作可以成功執行
SQL>insert into dual values(1);
1 row created.
2、但是通過select看到並沒有真正insert進去
SQL>select count(*) from dual;
COUNT(*)
----------
1
3、而且如果這時候shutdwon資料庫,必須顯式的commit或rollback
SQL>shut immediate
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
4、使用toad等工具會發現記錄實際上是insert進去了,只是Oracle對dual的select結果進行了處理,並沒有顯示出來這條記錄
5、由於資料實際上insert進去了,所以在insert後drop dual表會出錯
SQL>drop table dual;
drop table dual
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
6、從上面的實驗可以看出dual表在insert後資料會存在不一致的情況,解決辦法如下:
SQL>truncate table dual;
SQL>insert into dual values('X');
SQL>commit;
B、delete操作:
對於dual表的delete操作會出現錯誤,無法成功執行
SQL>delete table dual;
delete table dual
*
ERROR at line 1:
ORA-00903: invalid table name
C、update操作:
對於dual表的update操作可以正常進行
SQL>update dual set dummy='Y';
1 row updated.
SQL>select * from dual;
D
-
Y
從上面的實驗可以看出Oracle對於dual有一些獨特的限制,主要為了保證dual表只有一條記錄,但可能也會引發另外的一些問題,所以上述測試只能在測試環境中進行,絕對不要在生產庫上進行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/498744/viewspace-239009/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的dual表Oracle
- 【原創】Oracle10g bigfile表空間帶來的好處Oracle
- Oracle10g的FAST DUAL執行計劃OracleAST
- 探索oracle dual表Oracle
- 【原創】webservice效能研究Web
- Oracle dual表 詳解Oracle
- ORACLE DUAL表詳解Oracle
- Oracle中dual表的用途介紹Oracle
- [原創]■■易格式初步研究筆記■■筆記
- 誤刪除dual表的解決辦法
- dual表與create table語句的關係
- dual系統表被刪除的解決方法
- oracle統計表的所有行數(原創)Oracle
- [原創]一種通用DLL劫持技術研究
- 【原創】sqlnet.ora常用引數研究SQL
- 會話與事務級臨時表和dual表會話
- 【原創】表空間相關操作
- [原創] mysql表欄位多少限定MySql
- 【原創】drop操作與dual還是有很大關係的(ORA-01031錯誤的解決)
- 使用dual 虛表,構造連續資料
- 【DUAL】資料庫nomount狀態下DUAL的內容資料庫
- 【原創】通過資料字典操作刪除表的列
- [原創]微信PC端技術研究-訊息防撤銷
- 提升GPU效能,創新奇智發表最新研究論文GPU
- 全球價值最高的初創企業(附原資料表)
- Oracle10g歸檔引數研究Oracle
- [原創]如何獲得SBO的資料表中文描述和資料表的中文欄位
- 原創文章檢測工具,檢測原創文章,過不了原創賬號的原因在這
- [原創] 利用Oracle metric(threshold)監控表空間Oracle
- 從全備份的SQL語句中恢復某張表 [原創]SQL
- [20141218]誤操作刪除dual表的恢復.txt
- 【原創】MYSQL 的那些“坑”MySql
- 【原創】面試官:講講mysql表設計要注意啥面試MySql
- 10G FAST DUAL 的優化AST優化
- 刪除oracle10g中的垃圾表?(轉)Oracle
- [原創]微信PC端技術研究(3)-如何找到訊息傳送介面
- 創業的十個原則創業
- 【原創】匯出所有物件(表、索引、檢視、同義詞)的建立指令碼物件索引指令碼