Oracle 使用存储过程批量删除

删除条件数字类型

CREATE OR REPLACE PROCEDURE p_del_table
(
iTabName       VARCHAR2        -- 删除的表名
)
AS
vSql          VARCHAR2(2000); -- 执行删除的SQL语句
vTabName      VARCHAR2(100);  -- 表名
flag          NUMBER;         -- 删除标识
v_n           NUMBER;         -- 成功删除行数
BEGIN
vTabName:=TRIM(iTabName);
flag:=0;
LOOP
-- 循环删除数据,每次删除1000条然后commit
vSql:='DELETE FROM '||vTabName||' WHERE FLAG='||flag||' AND ROWNUM<2';
--执行动态SQL
EXECUTE IMMEDIATE vSql;
--查询影响的行数
v_n := SQL%ROWCOUNT;
dbms_output.put_line('成功删除行数: '||v_n);

IF (v_n>0) THEN
  COMMIT; -- 提交事务
ELSE
  COMMIT; -- 空提交
  EXIT;   -- 退出循环
END IF;

--删除的表数据为空时,退出
END LOOP;
--提示删除成功
dbms_output.put_line('DELETE TABLE '||vTabName||' Successfully!');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
--提示删除失败,并提示错误信息
dbms_output.put_line('DELETE TABLE '||vTabName||' Fail!');
dbms_output.put_line('Error Message is: '||substr(SQLERRM,1,200));
END;

删除条件字符串类型

CREATE OR REPLACE PROCEDURE p_del_table_by_str
(
iTabName       VARCHAR2        -- 删除的表名
)
AS
vSql          VARCHAR2(2000); -- 执行删除的SQL语句
vTabName      VARCHAR2(100);  -- 表名
pl_mc         VARCHAR2(50);         -- 删除标识
v_n           NUMBER;         -- 成功删除行数
BEGIN
vTabName:=TRIM(iTabName);
pl_mc:='''农作物''';
LOOP
-- 循环删除数据,每次删除1000条然后commit
vSql:='DELETE FROM '||vTabName||' WHERE PLMC='||pl_mc||' AND ROWNUM<2';
--执行动态SQL
EXECUTE IMMEDIATE vSql;
--查询影响的行数
v_n := SQL%ROWCOUNT;
dbms_output.put_line('成功删除行数: '||v_n);

IF (v_n>0) THEN
  COMMIT; -- 提交事务
ELSE
  COMMIT; -- 空提交
  EXIT;   -- 退出循环
END IF;

--删除的表数据为空时,退出
END LOOP;
--提示删除成功
dbms_output.put_line('DELETE TABLE '||vTabName||' Successfully!');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
--提示删除失败,并提示错误信息
dbms_output.put_line('DELETE TABLE '||vTabName||' Fail!');
dbms_output.put_line('Error Message is: '||substr(SQLERRM,1,200));
END;

测试执行

查看结果 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值