Oracle Dual表的使用

2021-04-29 07:19:08 字數 1462 閱讀 3977

oracle dual表的使用

dual在oracle中的使用非常頻繁,看到別人使用,有點疑惑。為啥要偏偏使用這張表呢?

今天就這個疑問baidu了下。現在總結一下。

1.dual是一張系統表(有人稱其為:虛擬表),只有乙個字段:dummy varchar2(1)允許為空

2.因為在dbms中查詢語句需要:select  from 表這種結構,所以當查詢系統時間,虛擬字段,oracle函式呼叫時,

為了構造select from 這種結構,我們常常使用dual表,比如

no1:select sysdate from dual

no2:select fun_common_test(66) from dual

3. dual只有一條資料。我在pl/sql修改dual表新增一條資料時,

系統會報"許可權不足"的錯誤。所以可以給變數賦值的時候直接

4.用select計算常量表示式、偽列等值時常用該錶,因為它只返回一行資料,而使用其它表時可能返回多個資料行(貌似與第2條重複)

no1:select 3+4 from dual

dual表的一種巧妙使用:

情況:在儲存過程活著函式中給變數賦值,

如果查詢無結果的話,

select into 語句會報錯:

oracle01403:未找到資料錯誤。

select cbic_sc_value

into red_flag

from cbizconfig

where cbic_org_id = 66

and cbic_sc_code = 'query_red_when_invoice';

查詢無記錄,賦值就會報錯。

處理方法1:判斷查詢的記錄,如果記錄小於1時,不進行賦值的操作:

select count(*)

into icount

from cbizconfig

where cbic_org_id = 66

and cbic_sc_code = 'query_red_when_invoice';

if icount > 0 then

select cbic_sc_value

into red_flag

from cbizconfig

where cbic_org_id = 66

and cbic_sc_code = 'query_red_when_invoice';

end if;

第2種辦法:

select

(select cbic_sc_value from cbizconfig

where cbic_org_id = 66

and cbic_sc_code = 'query_red_when_invoice') into red_flag

from dual

這樣巧妙的避開了無記錄賦值的情況。

--這種寫法還需要好好的領會。

oracle dual表的介紹

dual是乙個虛擬表,用來構成select的語法規則,oracle保證dual裡面永遠只有一條記錄。我們可以用它來做很多事情,如下 1 檢視當前使用者,可以在 sql plus中執行下面語句 select user from dual 2 用來呼叫系統函式 select to char sysdat...

Oracle dual表的用途

dual是乙個虛擬表,用來構成select的語法規則,oracle保證dual裡面永遠只有一條記錄。我們可以用它來做很多事情,如下 1 檢視當前使用者,可以在 sql plus中執行下面語句 select user from dual 2 用來呼叫系統函式 select to char sysdat...

記備忘4 oracle DUAL表使用

dual 說明 dual是oracle內部的實際存在的一張表,在資料庫建立時,資料庫會自動建立的dual表,表裡只有一條資料,警慎 dual跟 其它表一樣可以進行增刪改查以及drop操作,但是這些操作會影響資料庫功能。檢視當前使用者 select user from dual 檢視系統時間 sele...