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

Oracle 查看表結構指令大全:DESC、DBMS_METADATA、Data Dictionary 多維度方案

     編輯:Oracle 資料庫基礎

在 Oracle 中查看表結構不只有 DESC 一種方式。本文彙整 SQL*Plus/開發工具、PL/SQL 程式化、資料字典視圖、匯出 DDL 四大維度的查看方法,適用於互動式查詢、自動化腳本、文件生成、跨環境比對等場景。

一、互動式查詢(SQL*Plus / SQL Developer / TOAD / DBeaver)

-- 最常用
DESC table_name;
-- 或
DESCRIBE table_name;

-- 只看欄位名與型別
DESC table_name;
-- 輸出範例
Name          Null?    Type
------------- -------- -------------
EMPNO         NOT NULL NUMBER(4)
ENAME                  VARCHAR2(10)
JOB                    VARCHAR2(9)
MGR                    NUMBER(4)
HIREDATE               DATE
SAL                    NUMBER(7,2)
COMM                   NUMBER(7,2)
DEPTNO                 NUMBER(2)

二、程式化查詢(PL/SQL / Python / Java / Shell 腳本)

1. USER_TAB_COLUMNS - 標準欄位資訊

SELECT column_name, data_type, data_length, data_precision, data_scale,
       nullable, data_default, column_id
FROM   user_tab_columns
WHERE  table_name = UPPER('emp')
ORDER BY column_id;

2. USER_COL_COMMENTS - 欄位註解

SELECT column_name, comments
FROM   user_col_comments
WHERE  table_name = UPPER('emp');

3. USER_CONSTRAINTS / USER_CONS_COLUMNS - 約束與索引

-- 主鍵、外鍵、唯一、檢查約束
SELECT c.constraint_name, c.constraint_type, c.search_condition, c.status,
       cc.column_name, cc.position
FROM   user_constraints c
JOIN   user_cons_columns cc ON c.constraint_name = cc.constraint_name
WHERE  c.table_name = UPPER('emp')
ORDER BY c.constraint_type, cc.position;

4. USER_INDEXES / USER_IND_COLUMNS - 索引詳情

SELECT i.index_name, i.index_type, i.uniqueness, i.status, i.compression,
       ic.column_name, ic.column_position, ic.descend
FROM   user_indexes i
JOIN   user_ind_columns ic ON i.index_name = ic.index_name
WHERE  i.table_name = UPPER('emp')
ORDER BY i.index_name, ic.column_position;

5. USER_TAB_PARTITIONS / USER_TAB_SUBPARTITIONS - 分區資訊

SELECT partition_name, tablespace_name, num_rows, blocks, compression
FROM   user_tab_partitions
WHERE  table_name = UPPER('emp');

三、完整 DDL 導出(DBMS_METADATA)

-- 導出單表 DDL(含索引、約束、授權、分區、壓縮等)
SET LONG 1000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMP', 'SCOTT') FROM DUAL;

-- 導出特定 Schema 所有表 DDL
SELECT DBMS_METADATA.GET_DDL('TABLE', table_name, owner)
FROM   dba_tables
WHERE  owner = 'SCOTT';

-- 導出依賴物件(索引、觸發器、授權)
SELECT DBMS_METADATA.GET_DEPENDENT_DDL('INDEX', 'EMP', 'SCOTT') FROM DUAL;
SELECT DBMS_METADATA.GET_DEPENDENT_DDL('TRIGGER', 'EMP', 'SCOTT') FROM DUAL;
SELECT DBMS_METADATA.GET_DEPENDENT_DDL('GRANT', 'EMP', 'SCOTT') FROM DUAL;

參數美化:

EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE); -- 隱藏 TABLESPACE 等

四、命令列工具:expdp / impdp 中繼資料過濾

# 只導出結構,不導資料
expdp scott/tiger directory=dp_dir dumpfile=meta.dmp content=METADATA_ONLY tables=EMP

# 只導出特定物件類型
expdp ... content=METADATA_ONLY include=TABLE:"IN ('EMP','DEPT')"

五、場景選擇指南

場景推薦方式理由
快速互動確認欄位型別DESC零配置、即時回饋
自動化腳本抓取結構USER_TAB_COLUMNS標準 SQL、跨工具相容
生成建表腳本遷移/版控DBMS_METADATA.GET_DDL完整、可重現、含儲存屬性
跨環境結構比對DBMS_METADATA + DIFF 工具消除格式差異,專注語義差異
文件生成(Data Dictionary)USER_TAB_COLUMNS + USER_COL_COMMENTS可 JOIN 產出豐富報表

六、MySQL / PostgreSQL 對應指令

-- MySQL
DESC table_name;
SHOW CREATE TABLE table_name;
SELECT * FROM information_schema.columns WHERE table_name = 'emp';

-- PostgreSQL
\d table_name
\d+ table_name
SELECT * FROM information_schema.columns WHERE table_name = 'emp';

掌握多維度查看表結構技巧,能在開發除錯、架構審查、自動化部署、異構遷移等場景中游刃有餘,將「看結構」從手工動作轉為可程式化、可版控的工程化能力。

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