Oracle存储过程删除大批量数据
时间: 2023-07-08 21:24:05 浏览: 62
可以使用以下的存储过程来删除大批量数据:
```
CREATE OR REPLACE PROCEDURE delete_large_data
(
p_table_name IN VARCHAR2,
p_condition IN VARCHAR2,
p_batch_size IN NUMBER DEFAULT 10000
)
IS
v_count NUMBER;
BEGIN
LOOP
EXECUTE IMMEDIATE 'DELETE FROM ' || p_table_name || ' WHERE ' || p_condition || ' AND ROWNUM <= ' || p_batch_size
RETURNING COUNT INTO v_count;
IF v_count = 0 THEN
EXIT;
END IF;
COMMIT;
END LOOP;
END;
```
该存储过程接受三个参数:表名、删除条件和批次大小。它使用循环执行多个 DELETE 语句,每个批次删除指定数量的行,直到没有更多行需要删除。每个批次后都会提交事务,以减少回滚段的负担。
使用时,可以像这样调用:
```
BEGIN
delete_large_data('my_table', 'my_condition');
END;
```
其中 `my_table` 是要删除数据的表名,`my_condition` 是删除条件。如果要更改批次大小,可以添加第三个参数,例如:
```
BEGIN
delete_large_data('my_table', 'my_condition', 5000);
END;
```
这将在每个批次中删除 5000 行。