首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DUAL 表深度解析:字元函數、大小寫存儲與虛擬表特性

     編輯:Oracle 資料庫基礎

DUAL 是 Oracle 最特殊的系統表:單行、單欄 DUMMY VARCHAR2(1),保證永遠只回傳一筆資料。查詢 SYSDATE、SEQUENCE.NEXTVAL 等無表來源值時必須 FROM DUAL。

一、字元函數速查

分類函數範例結果說明
大小寫轉換LOWERLOWER('ABC')'abc'
UPPERUPPER('abc')'ABC'
INITCAPINITCAP('hello world')'Hello World'
字元操作CONCAT / \|\|CONCAT('A','B')'AB'
SUBSTRSUBSTR('ABCDE',1,3)'ABC'
LENGTHLENGTH('我愛你')3 (中英皆 2 bytes/char)
INSTRINSTR('ABCDE','C')3 (位置)
LPAD/RPADLPAD('X',5,'*')'****X'

二、內部大寫存儲鐵律

Oracle 內部**一律以大寫儲存**資料。查詢時若不轉大寫將找不到資料:

SELECT * FROM EMP WHERE ENAME = 'king';     -- 無結果
SELECT * FROM EMP WHERE ENAME = UPPER('king'); -- 正確

三、DUAL 表特殊行為實測

-- 預設只有一行
SELECT * FROM DUAL;  -- DUMMY='X'

-- 可插入/刪除 (極度不建議刪除,會導致資料庫無法啟動)
INSERT INTO DUAL VALUES ('Y');
INSERT INTO DUAL VALUES ('Z');
SELECT ROWID, DUMMY FROM DUAL ORDER BY DUMMY;
-- 結果顯示三行,但 Oracle 內部邏輯仍視為單行虛擬表
-- 刪除後可設 REPLICATION_DEPENDENCY_TRACKING=FALSE 修復

四、核心認知

  1. DUAL 是**記憶體虛擬表**,磁碟上實體表僅為維護字典與權限。
  2. 每張表皆有隱藏 ROWID、ROWNUM (除 DUAL 無 ROWNUM)。
  3. 查詢系統函數、序列值、常數運算時,**強制 FROM DUAL**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved