Oracle查看表结构的多种方法详解
作者:穆金秋
本文介绍了Oracle查看表结构的多种方法,包括使用DESCRIBE、查询数据字典视图、获取建表语句等,并将Oracle与MySQL进行了对比,Oracle提供了更详细的信息,但需要使用更多的命令,需要的朋友可以参考下
Oracle提供了多种查看表结构的方法:
- 1. 使用DESCRIBE命令快速查看列名和类型;
- 2. 查询USER_TAB_COLUMNS获取详细列信息;
- 3. 通过USER_COL_COMMENTS查看列注释;
- 4. 使用USER_CONSTRAINTS查询约束信息;
- 5. 调用DBMS_METADATA.GET_DDL获取完整建表语句。
相比MySQL的DESC命令,Oracle的数据字典视图提供了更全面的表结构信息,包括列属性、约束、注释等。
开发人员可根据需求选择不同方法,从简单查看列名到获取完整DDL语句。
Oracle 没有像 MySQL 的 DESC 或 SHOW COLUMNS 那样简单的命令,但有多种方式可以查看表结构。
一、使用 DESCRIBE(最常用)
DESC actor; -- 或 DESCRIBE actor;
输出示例:
Name Null? Type ------------ ----- ------------- ACTOR_ID NOT NULL NUMBER(5) FIRST_NAME NOT NULL VARCHAR2(45) LAST_NAME NOT NULL VARCHAR2(45) LAST_UPDATE NOT NULL DATE CREATE_DATE NOT NULL DATE
二、查询数据字典视图(最详细)
2.1 查看列信息
-- 查看指定表的所有列
SELECT
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
NULLABLE,
DATA_DEFAULT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'ACTOR'
ORDER BY COLUMN_ID;2.2 查看详细列信息(含注释)
SELECT
a.COLUMN_NAME,
a.DATA_TYPE,
a.DATA_LENGTH,
a.NULLABLE,
b.COMMENTS
FROM USER_TAB_COLUMNS a
LEFT JOIN USER_COL_COMMENTS b
ON a.TABLE_NAME = b.TABLE_NAME
AND a.COLUMN_NAME = b.COLUMN_NAME
WHERE a.TABLE_NAME = 'ACTOR'
ORDER BY a.COLUMN_ID;三、数据字典视图对比
| 视图 | 作用 | 说明 |
|---|---|---|
USER_TAB_COLUMNS | 当前用户拥有的表列信息 | 最常用 |
ALL_TAB_COLUMNS | 当前用户可访问的所有表列 | 权限范围更广 |
DBA_TAB_COLUMNS | 数据库所有表的列 | 需要 DBA 权限 |
USER_COL_COMMENTS | 当前用户表的列注释 | 查看 COMMENT |
USER_CONSTRAINTS | 当前用户表的约束信息 | 查看主键、外键等 |
USER_IND_COLUMNS | 当前用户表的索引列 | 查看索引信息 |
四、综合查询示例
查看表完整结构(列+约束+注释)
-- 列信息 + 注释
SELECT
t.COLUMN_ID,
t.COLUMN_NAME,
t.DATA_TYPE,
t.DATA_LENGTH AS "LENGTH",
t.NULLABLE,
c.COMMENTS
FROM USER_TAB_COLUMNS t
LEFT JOIN USER_COL_COMMENTS c
ON t.TABLE_NAME = c.TABLE_NAME AND t.COLUMN_NAME = c.COLUMN_NAME
WHERE t.TABLE_NAME = UPPER('actor')
ORDER BY t.COLUMN_ID;查看主键信息
SELECT
a.COLUMN_NAME,
a.CONSTRAINT_NAME
FROM USER_CONS_COLUMNS a
JOIN USER_CONSTRAINTS b
ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE b.TABLE_NAME = 'ACTOR'
AND b.CONSTRAINT_TYPE = 'P';五、MySQL vs Oracle 查看表结构对比
| 操作 | MySQL | Oracle |
|---|---|---|
| 简单查看 | DESC actor; | DESC actor; |
| 查看列详情 | SHOW COLUMNS FROM actor; | SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='ACTOR'; |
| 查看建表语句 | SHOW CREATE TABLE actor; | SELECT DBMS_METADATA.GET_DDL('TABLE','ACTOR') FROM DUAL; |
| 查看注释 | SHOW FULL COLUMNS FROM actor; | SELECT * FROM USER_COL_COMMENTS; |
| 查看索引 | SHOW INDEX FROM actor; | SELECT * FROM USER_IND_COLUMNS; |
| 查看约束 | 用 SHOW CREATE TABLE | SELECT * FROM USER_CONSTRAINTS; |
六、获取建表语句(DDL)
-- Oracle 特有方式
SELECT DBMS_METADATA.GET_DDL('TABLE', 'ACTOR') FROM DUAL;
-- 如果表属于其他用户(如 SCOTT)
SELECT DBMS_METADATA.GET_DDL('TABLE', 'ACTOR', 'SCOTT') FROM DUAL;输出示例:
CREATE TABLE "SCOTT"."ACTOR" (
"ACTOR_ID" NUMBER(5) NOT NULL ENABLE,
"FIRST_NAME" VARCHAR2(45) NOT NULL ENABLE,
"LAST_NAME" VARCHAR2(45) NOT NULL ENABLE,
"LAST_UPDATE" DATE NOT NULL ENABLE,
"CREATE_DATE" DATE DEFAULT TO_DATE('2020-10-01','YYYY-MM-DD') NOT NULL ENABLE,
PRIMARY KEY ("ACTOR_ID") ENABLE
)七、常用快捷命令总结
| 命令/查询 | 用途 |
|---|---|
DESC 表名 | 快速查看列名和类型 |
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='表名'; | 查看列详细信息 |
SELECT * FROM USER_COL_COMMENTS WHERE TABLE_NAME='表名'; | 查看列注释 |
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME='表名'; | 查看约束 |
SELECT DBMS_METADATA.GET_DDL('TABLE','表名') FROM DUAL; | 获取完整建表语句 |
到此这篇关于Oracle查看表结构的多种方法的文章就介绍到这了,更多相关Oracle查看表结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
