【发布时间】:2015-11-11 12:24:37
【问题描述】:
我有一个如下所示的表格:
表1
column1 column2 column3
1 2 3
a 6 9
b 8 7
我需要将此数据以这种格式复制到另一个表中:
表2
column_name value
column1 1
column1 a
column1 b
column2 2
column2 6
column2 8
column3 3
column3 9
column3 7
有 100 多个表,例如 table1,有数百万行。我需要把它复制到 table2 中。
所以,我打算这样写:
INSERT INTO table2
(column_name, value)
SELECT 'column1', column1
FROM table1;
INSERT INTO table2
(column_name, value)
SELECT 'column2', column2
FROM table1;
INSERT INTO table2
(column_name, value)
SELECT 'column3', column3
FROM table1;
我有 80 个这样的列。有没有一种有效的方法来编写这个也可以在 Oracle 中快速复制数据?
编辑:更改示例数据集以包含不同类型的数据。如果我使用 unpivot,它会给我:
ORA-01790: 表达式必须与对应的表达式具有相同的数据类型
【问题讨论】:
-
我不知道为什么会有上面这样的要求。但如果必须这样做,只需像上面那样生成 80 个插入语句并一次运行它们。有时你必须粗暴对待硬件。
-
@VarunRao - 拥有键值结构是不是很糟糕?有没有办法优化这个?
-
编写一个Java应用程序或PL/SQL脚本程序来处理它。
-
@dang 键值结构通常在精心设计的 RDBMS 中不受欢迎。首先,查询起来要困难得多。