Oracle使用CREATE TABLE LIKE报错00922:缺失或无效选项的技术咨询
问题原因
Oracle不支持CREATE TABLE new_table LIKE old_table;这种语法,该语法常见于MySQL、PostgreSQL等其他数据库,Oracle执行时会因无法识别LIKE选项而抛出00922错误。
替代解决方案
方案一:快速复制基础结构(不含高级约束/索引)
使用CREATE TABLE ... AS SELECT语句,能快速复制表的列定义、数据类型及NOT NULL约束,且不包含数据:CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1=0;注意:此方法不会复制主键、外键、唯一约束、索引、触发器、列默认值等对象,若需这些结构需手动添加。
方案二:完整复制所有表结构(含约束、索引等)
通过Oracle内置的DBMS_METADATA包获取原表的完整DDL语句,修改表名后执行即可完全复刻原表结构:-- 替换OWNER_NAME为原表所属用户名,当前用户为表所有者时可省略第三个参数 SELECT DBMS_METADATA.GET_DDL('TABLE', 'OLD_TABLE', 'OWNER_NAME') FROM DUAL;将查询返回的DDL语句中的表名改为
new_table,执行该语句就能得到与原表完全一致的结构,包括所有约束、索引、触发器等。方案三:Oracle 12cR2及以上版本专属语法
若使用Oracle 12cR2或更高版本,可直接使用增强版的类LIKE语法:CREATE TABLE new_table LIKE old_table INCLUDING ALL INDEXES INCLUDING CONSTRAINTS INCLUDING TRIGGERS;此语法可直接复制原表的所有结构元素,无需额外操作。
内容的提问来源于stack exchange,提问作者Kinner
相关产品推荐
相关产品推荐

