首發微信公眾號:SQL資料庫運維 原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7 ...
首發微信公眾號:SQL資料庫運維
這幾天一直在研究Oracle,常常會用到Dual這個系統表,Dual表到底是一個什麼表?帶著疑問baidu了一下:
Dual表是Oracle提供的最小的工作表(其實是一種虛擬表),是sys用戶下的一張內部表,只有一行一列(一列:DUMMY,一列:DUMMY,其數據類型為:VARCHAR2(1))。所有用戶都可以使用Dual名稱訪問,無論什麼時候這個表總是存在。不論進行何種操作(不要刪除記錄),它都只有一條記錄——'X'。
select * from dual;
我們來查一下它的表結構,PL/SQL Developer【命令視窗】輸入desc dual;
或者sys用戶下【SQL視窗】執行以下語句
SELECT DBMS_METADATA.GET_DDL('TABLE','DUAL') FROM DUAL;
那麼Dual在實際應用過程中可以做些什麼呢?
- Dual表主要用來選擇系統變數或求一個表達式的值,最常見的一個簡單例子,執行一個查看當前日期的語句,這條語句放在任何一個Oracle資料庫當中都不會報錯,所以一般做一些特定查詢的時候用這個表是最穩妥的。
select sysdate from dual; --或日期轉換獲得當前系統時間,‘分鐘’ 要用mi;hh24表示24小時制,hh表示12小時制。 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
- 當計算器使用
select 1024*1024 from dual;
-
查詢當前連接用戶
select user from dual;
-
查看序列值
--創建序列aaa 以1開始,每次加1 create sequence aaa increment by 1 start with 1; --獲得序列aaa 的下一個序列值,每次查詢加1 select aaa.nextval from dual; --獲得序列aaa 的當前序列值 select aaa.currval from dual;
-
獲得一個隨機數
select DBMS_RANDOM.random from dual;
Dual到底是什麼object?
select owner, object_name , object_type from dba_objects where object_name like '%DUAL%';
經過查詢輸出的結果可以看到Dual是屬於sys的一個表,然後以PUBLIC SYNONYM的方式供其他用戶使用。