oracle中的dual詳解

2021-08-02 10:03:18 字數 1495 閱讀 4111

對於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 ...