在 Oracle 中快速创建表结构(仅复制表结构,不复制数据)可以通过以下方法实现,适用于需要快速复制表定义或生成空表的场景
1. 使用 CREATE TABLE AS SELECT
(CTAS) 方法
-- 复制源表的全部列和数据类型,但不复制数据
CREATE TABLE new_table AS SELECT * FROM source_table WHERE 1=0;-- 示例:从 employees 表复制结构
CREATE TABLE employees_copy AS SELECT * FROM employees WHERE 1=0;
-
仅复制列名、数据类型和
NOT NULL
约束。 -
不会复制主键、外键、索引、默认值、注释等元数据。
-
适用于快速生成临时表或测试表。
2. 使用 DBMS_METADATA
生成 DDL
通过 Oracle 内置包 DBMS_METADATA
获取表的完整 DDL 语句,手动修改表名后执行:
获取源表的 DDL:
-- 设置输出格式
SET LONG 1000000
SET PAGESIZE 0-- 获取表结构的 DDL
SELECT DBMS_METADATA.GET_DDL('TABLE', 'SOURCE_TABLE') FROM DUAL;
修改表名并执行:
将生成的 DDL 语句中的 SOURCE_TABLE
替换为新表名,
CREATE TABLE new_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
...
);
-
完整复制表结构(包括约束、索引、注释等)。
-
需要手动修改表名和其他参数(如表空间)。
3. 使用 SELECT * FROM
结合 UNION ALL
-- 示例:快速定义与 employees 结构相同的空表
CREATE TABLE employees_empty AS
SELECT
NULL AS employee_id, -- 数据类型自动继承
NULL AS first_name,
NULL AS last_name,
NULL AS hire_date,
NULL AS salary,
NULL AS department_id
FROM DUAL
WHERE 1=0;