删除条件数字类型
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) THENCOMMIT; -- 提交事务
ELSECOMMIT; -- 空提交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) THENCOMMIT; -- 提交事务
ELSECOMMIT; -- 空提交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;
测试执行

查看结果

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!