在 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;