Oracle:创建一个表副本,免除完全空行

问题描述 投票:0回答:1

我的任务是修复 Oracle 中的错误数据问题。有完全空的行(百万),没有PK,没有indeces,并且该表经常使用。这导致消费应用程序大幅减速。我的想法是,由于表也需要备份,因此使用此处描述的功能:在 oracle 中创建现有表的完整副本。这将为我提供一个新的表来创建 PK 和 indeces,并确保所有触发器和此类结转。然后我可以使用重命名来交换哪个表是“备份”与生产中的表。

我的想法是在创建新表时劫持

WHERE
子句,并将“WHERE 1 = 0”替换为过滤完全空行的值。然而,完全为空是指每个值都是空的。

CREATE TABLE 'TABLE' AS SELECT * FROM OLD_TABLE WHERE......

有没有比用

SELECT
一遍又一遍地将每一列与相同的
AND
子查询进行比较更快的方法?大约有 60 列。

...WHERE col1 NOT IN (long subquery)
AND col2 NOT IN (identical long subquery)
AND col3 not in....
database oracle plsql null rdbms
1个回答
0
投票

这可能就是您正在寻找的:

CREATE TABLE new_table AS
SELECT *
FROM  old_table
WHERE col1 IS NOT NULL
OR    col2 IS NOT NULL
etc
© www.soinside.com 2019 - 2024. All rights reserved.