【发布时间】:2018-07-12 20:14:02
【问题描述】:
我正在使用 Oracle db,我想知道是否可以编写如下内容:
INSERT INTO CL (select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME='CL')
SELECT * FROM CLT;
或:
INSERT INTO CL (select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME='CL')
SELECT (select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME='CL') FROM CLT;
所以想法是两个表都有相同的列,但是列的顺序不匹配,所以当我尝试做简单的时候
INSERT INTO CL
SELECT * FROM CLT;
我不断收到 ORA-00932:不一致的数据类型,如果我一一指定所有列,它就不会发生。但我不想这样做,因为我的表有大约 50 列,我希望有一个强大的解决方案,以后我也可以将其应用于其他表。
这就是为什么我正在考虑使用子查询来获取 INSERT INTO 查询中的列名,但是这在 sql 中是不可能的,或者我做错了什么。
有没有办法跳过其中列的顺序(并强制 sql 使用名称?)或在该查询中使用子查询以相同顺序获得所有列名的两倍?
PS。我正在考虑将它们重新排序为 INVISIBLE 并返回 VISIBLE,但我的版本不支持它。而且它不会像我需要的那样可重复使用。
【问题讨论】: