1. 程式人生 > >oracle資料庫中的sys.dual

oracle資料庫中的sys.dual

        最近在學習oracle資料庫時,寫觸發器時發現了這個sys.dual。不知為何物,查閱資料終於明白了。dual是一個虛擬表,用來構成select的語法規則,oracle保證dual裡面永遠只有一條記錄。我們可以用它來完成很多工作,如下所示:

       1、檢視當前使用者,可以在SQL Plus或者PL/SQL中執行語句select  User from dual;

       2、用來呼叫系統函式

            select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;--獲得當前系統時間

       select SYS_CONTEXT(’USERENV’,’TERMINAL’) from dual;--獲得主機名

       select SYS_CONTEXT(’USERENV’,’language’) from dual;--獲得當前      locale

       select dbms_random.random from dual;--獲得一個隨機數

      3、得到序列的下一個值或當前值,用下面語句

            select your_sequence.nextval from dual; --獲得序列your_sequence的下一個值

            select your_sequence.currval from dual; --獲得序列your_sequence的當前值

      4、可以用做計算器select 7*9 from dual;

       oracle系列中dual表是一個“神祕”的表,很多人對該表進行了測試,該表只有一行一列,其實該表和系統中的其他表一樣,一樣可以執行插入、更新、刪除操作,還可以執行drop操作。但是不要去執行drop表的操作,否則系統不能使用,資料庫起不了,但是你還沒絕望,下面的步驟可以幫你恢復該表。可以用Sys使用者登入。

        SQL>create pfile='d:pfile.bak' from spfile

        SQL>shutdown immediate

        在d:pfile.bak檔案中最後加入一條:

         重新啟動資料庫:

          SQL>startup pfile='d:pfile.bak';

          SQL>create table "sys"." dual"

          [an error occurred while processing this directive]