Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中使用函数的返回值更新每一行_Sql_Database_Oracle_Cursor_Sql Update - Fatal编程技术网

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

Sql 在Oracle中使用函数的返回值更新每一行,sql,database,oracle,cursor,sql-update,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; UP

我有一个游标和一个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;
我的问题是,有没有更快的方法?我不喜欢使用游标,因为它们非常慢。有没有一种方法可以对这种工作使用简单的更新?还是加速光标? 我看到了很多关于批量收集和选择更新的东西,但我真的不明白这些东西说实话。 有人能帮助我如何在不使用太多数据库性能的情况下高效地完成这项工作吗?
提前感谢。

更新表1 SET status=check\U STATUSSITEM WHERE item在表1的SELECT列1中的项目对不起,我打错了WHERE子句,你能再检查一下吗?啊,我找到了。谢谢你的提示,如果你发布一个答案,我很乐意接受。UPDATE table1 SET status=check\u status column1不客气:在Oracle中,始终遵循以下规则:在SQL中执行所有操作。如果不能在SQL中执行,请在PLSQL中执行。如果你不能在PlSql做,那么在外部代码C、java、C++、C.中做,如果你不能用外部代码来做,那么你就做了错事。