對於oracle的dual,有以下幾點我們需要明確:
第一點dual不是縮寫詞而是完整的單詞。dual名詞意思是對數,做形容詞時是指二重的,二元的。
第二點oracle中的dual表是乙個單行單列的虛擬表。
第三點dual表是oracle與資料字典一起自動建立的乙個表,這個表只有1列dummy,資料型別為verchar2(1),dual表中只有乙個資料'x', oracle有內部邏輯保證dual表中永遠只有一條資料。
第四點dual表主要用來選擇系統變數或求乙個表示式的值。
第五點最常見的乙個簡單的例子select sysdate from daul
oracle的select語法的限制為 select * | [column1 [as alias1], column2 [as alias2]] from table
所以沒有表名就沒有辦法查詢,而時間日期並不存放在任何表中,於是這個dual虛擬表的概念就被引入了。
dual表的用途
dual是oracle中的乙個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中。
檢視當前連線使用者
select user from dual;
system
檢視當前日期、時間
select sysdate from dual;
2007-1-24 1
日期轉換
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2007-01-24 15:02:47
當作計算器用
select 1+2 from dual;
3建立檢視序列值
create sequence aaa increment by 1 start with 1;
select aaa.nextval from dual;
1select aaa.currval from dual;
1dual就是個一行一列的表,如果你往裡執行insert,delete,truncate操作,就會導致很多程式出問題。結果也因sql*plus、pl/sql dev等工具而異。假我們插入想dual插入一條資料,那會是什麼結果呢?
insert into dual values('y');
select * from dual;
dummy
-----xy
select sysdate from dual;
sysdate
-----------
2004-12-15
2004-12-15
這個時候返回的是兩條記錄,會引起問題。在通過使用select sysdate into v_sysdate from dual來獲取時間或者其他資訊的儲存過程來說,oracle會丟擲too_many_rows(ora-01422)異常。
因此,需要保證在dual表內有且僅有一條記錄,不能把dual表的update,insert,delete許可權隨意釋放出去,這樣對於系統是很危險的。
Oracle中dual的解釋
q dual是什麼?a dual是乙個系統表,不能刪除或者修改其表結構。它的名稱叫做 偽表 或者 啞表 檢視其表結構 sql desc dual 名稱 是否為空?型別 dummy varchar2 1 其欄位只有乙個 dummy 中文叫做 啞巴 長度只有1。這個表結構只供參考。oracle的sele...
oracle中 dual 的含義
字串查詢 instr 函式 格式 select instr 字串 子字串 開始查詢的位置,第幾個匹配的 from dual select instr hellosdahedsd he 2 from dual 補充 dual 是資料庫中的 乙個 虛 偽 表 沒實際意義的 但不可省略 dual是orac...
Oracle學習3 dual詳解
oracle中有乙個單行單列的虛擬表dual,引入該錶的目的是為了符合語法。dual表是oracle與資料字典一起自動建立的乙個表。oracle有內部邏輯保證dual表中永遠只有一條資料。oracle的select語法的限制為 select column1 as alias1 column2 as ...