首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle數據庫元數據查詢:tab視圖與user_tables視圖的本質區別

     編輯:程式設計綜合問答

語句對比


-- 語句1
SELECT * FROM tab;

-- 語句2
SELECT table_name FROM user_tables;

核心區別

維度tabuser_tables
對象類型同義詞/視圖(指向SYS.TAB$)數據字典視圖(標準接口)
返回範圍當前用戶擁有的表、視圖、同義詞、簇僅當前用戶擁有的表
列信息TNAME, TABTYPE, CLUSTERIDTABLE_NAME, TABLESPACE_NAME, ... 40+列
標準化程度Oracle專有,舊版本兼容符合SQL標準信息模式
性能較快(較少列)稍慢(豐富元數據)

實際輸出示例


-- tab 輸出
TNAME      TABTYPE  CLUSTERID
---------- ------- ----------
EMP        TABLE
DEPT       TABLE
V_EMP_DEPT VIEW
SYN_EMP    SYNONYM

-- user_tables 輸出
TABLE_NAME  TABLESPACE_NAME  ...
----------  ---------------  ---
EMP         USERS            ...
DEPT        USERS            ...

最佳實踐建議

  1. 現代開發:統一使用`user_tables`/`all_tables`/`dba_tables`系列視圖
  2. 腳本兼容:舊腳本維護中見到`tab`無需強制重寫,但新代碼禁用
  3. 權限最小化:普通用戶查`user_tables`,DBA查`dba_tables`
  4. 過濾精確:`SELECT table_name FROM user_tables WHERE table_name LIKE 'T_%'`

擴展:常用元數據視圖速查


-- 當前用戶所有對象
SELECT object_name, object_type FROM user_objects;

-- 表結構詳情
SELECT column_name, data_type, nullable FROM user_tab_columns WHERE table_name='EMP';

-- 索引信息
SELECT index_name, uniqueness FROM user_indexes WHERE table_name='EMP';

總結

`tab`是歷史產物,功能單一;`user_tables`是規範接口,功能完整。新項目請直接使用標準字典視圖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved