oracle 分批 更新无主键的表
时间: 2023-09-04 07:07:19 浏览: 125
Oracle两张表关联批量更新其中一张表的数据
在Oracle数据库中,如果要更新一张没有主键的表,可以使用ROWID作为更新条件。ROWID是Oracle的一种特殊的伪列,它记录了每一行数据在物理存储中的位置。以下是一个示例:
```sql
DECLARE
CURSOR c1 IS
SELECT ROWID, name, age FROM my_table WHERE status = 'NEW';
TYPE t1 IS TABLE OF c1%ROWTYPE;
l_data t1;
BEGIN
OPEN c1;
LOOP
FETCH c1 BULK COLLECT INTO l_data LIMIT 1000;
EXIT WHEN l_data.COUNT = 0;
FORALL i IN 1..l_data.COUNT
UPDATE my_table SET age = l_data(i).age WHERE ROWID = l_data(i).ROWID;
COMMIT;
END LOOP;
CLOSE c1;
END;
```
以上代码将my_table表中status为'NEW'的记录按照每次1000条记录为一批进行更新,以ROWID作为更新条件,避免一次更新大量数据对系统造成的负载影响。
阅读全文