使用Oracle中函数的返回值更新每一行

时间:2014-03-13 14:01:45

标签: sql database oracle cursor sql-update

我有一个游标和一个for来更新表的每一行,使用一个函数来获取新值。该表可以包含数千行。该函数返回一个简单的字符串,它已经在很多现有程序中使用,因此不能选择更改它。

var_item VARCHAR2(20);
CURSOR cursor IS
    SELECT DISTINCT column1 FROM table1;

BEGIN
OPEN cursor;
LOOP
FETCH cursor INTO var_item;
EXIT WHEN cursor%NOTFOUND;
    UPDATE table1 SET status = (SELECT check_status(var_item) FROM dual) WHERE column1 = var_item;
END LOOP;
CLOSE cursor;
END;

我的问题是,有更快的方法吗?我不喜欢使用游标,因为它们非常慢。有没有办法为这种工作使用简单的更新?或者加速游标? 我看到很多关于BULK COLLECT和SELECT FOR UPDATE的东西,但我真的不明白这些事情要说实话。 有人可以帮助我如何有效地做到这一点,而不使用太多的数据库性能? 提前谢谢。

0 个答案:

没有答案