转换大量行

时间:2010-11-15 06:54:24

标签: sql oracle

我必须为表格计划转换。表结构类似于

COULMN1    CHAR(1)
COLUMN2    VARCHAR2(20)
COLUMN3    DATE

我需要根据以下逻辑转换此表:

  • IF COLUMN2 ='XXX',然后更新COLUMN1 ='X'

要更新的行数很大(以百万为单位)。因此,我无法提供简单的更新声明,因为我只有有限的时间来执行此活动。 到目前为止,我有一个想法,即创建一个包含转换值的临时表;删除主表并使用原始表重命名临时表。

是否有任何身体有任何不同的想法?

3 个答案:

答案 0 :(得分:2)

你可以尝试一次一点,例如:

UPDATE atable
SET column1 = 'X'
WHERE (column1 != 'X' OR column1 IS NULL)
AND column2 = 'XXX'
AND ROWNUM <= 100000;

这将在必要时更新前100,000行。改变口味。提交,冲洗并重复,直到显示“0行更新”。

答案 1 :(得分:0)

我不是DB pro&amp;这就是我的想法。

XXX的行数是否超过其他行?
如果是这样,创建一个表以使用XXX转储行,并将column1设置为X.
插入不是XXX的其余行 截断旧表。
从新表中插入旧表中的内容。

数据库专家可以评论/评论这种方法。

答案 2 :(得分:0)

如果用户想要在转换过程中查看新数据,您可以使用视图。

重命名您的表,例如[table_old],并创建一个新表[table_new],其中更新的值将被复制到。使用表[table]的原始名称创建视图,该表返回[table_new]的所有行以及[table_old]中不在[table_new]中的所有行。

转换完所有数据后,删除旧表和视图,然后将[table_new]重命名为原始表名。

希望这是一个清晰的描述!