建立存储过程
create or replace procedure delBigTab
(
p_TableName in varchar2,
p_Condition in varchar2,
p_Count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from ' || p_TableName || ' where ' || p_Condition || ' and rownum <= :rn'
USING p_Count;
if SQL%NOTFOUND then
exit;
else
n_delete:=n_delete + SQL%ROWCOUNT;
end if;
commit;
end loop;
commit;
DBMS_OUTPUT.PUT_LINE('Finished!');
DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;
--用delBigTab来删除数据
实例1:
SQL> exec delbigtab('t_delta_log_test', 'entity_type=4', '1000');
--删除t_delta_log中满足条件entity_type=4的数据,每300条commit一次
实例2:删除t_delta_log_test表中所有数据,每1000条commit一次
SQL>exec delbigtab('t_delta_log_test', '1=1', '1000');
分析:
1、因为删除数据的表以及条件都是作为参数传进来的,因此DELETE语句要动态构建。这里使用了EXECUTE IMMEDIATE来完成。其中有一个参数rn,用USING将p_Count的值传进去;
2、批量删除的主要实现原理是使用rownum<=:rn,就是删除固定的前p_Count条。主要原理要求对ORACLE的rownum有好的理解;
3、SQL%NOTFOUND、SQL%FOUND和SQL%ROWCOUNT 是Oracle有关游标的3个常见属性值。在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL.在执行DML语句后,SQL%FOUND的属性值将是:
. TRUE :INSERT
. TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
. TRUE :SELECT INTO至少返回一行
当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。
SQL%ROWCOUNT
在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND.
这里边
if SQL%NOTFOUND then
exit;
的含义就是如果没有记录被删除,就退出循环,说明删除结束了。否则,就把成功删除的记录加到n_delete上
原文:http://blog.csdn.net/aaaaaaaa0705/article/details/7278749
分享到:
相关推荐
Oracle 表删除大量数据后查询变慢问题分析 在 Oracle 数据库中,如果删除了大量数据(千万级别),可能会出现查询变慢的问题。下面我们将分析这个问题的原因,并提供解决方案。 问题的原因主要有两个方面: 1. 表...
本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...
在存储过程中使用游标,可以实现按需处理数据,尤其在处理大量数据或需要分步操作时非常有用。例如,你可以创建一个存储过程,用于逐行更新数据,或者根据条件动态处理结果集。 三、36个源码例子 这些例子涵盖了从...
Oracle数据库支持通过数组参数来进行批量操作,这在处理大量数据时能显著提高性能。在本例中,我们探讨了如何使用数组存储过程进行批量插入和删除。数组在Oracle中的使用通常涉及定义PL/SQL类型,这允许我们创建索引...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
Oracle存储过程是数据库管理系统中一组预编译的SQL语句,允许开发人员创建复杂的业务逻辑,提高数据库操作的效率和安全性。在Oracle中,编写高效且优化的存储过程是提升系统性能的关键步骤。 首先,存储过程的编写...
Oracle存储过程是数据库管理系统Oracle中的一种重要特性,它允许开发者编写和存储PL/SQL代码,以便在需要时高效地执行。存储过程具有多种优势,包括提高性能、减少网络流量、增强安全性和简化复杂的数据库操作。 1....
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
在IT领域,尤其是在数据库管理与开发中,Oracle存储过程是一种常用的技术手段,用于实现复杂的业务逻辑、数据处理和批量操作。根据给定的文件信息,本文将深入探讨Oracle存储过程如何用于批量创建用户,以及如何读取...
通过以上的介绍,我们可以了解到Oracle存储过程的定义、使用方法、变量的定义与声明、游标的使用、循环控制语句、过程控制语句、存储过程的创建和异常处理、触发器的概念与使用、JOB的管理以及SQL优化策略等多个方面...
临时表在处理大量数据时非常有用,可以作为中间存储,避免频繁操作原表,提高性能并降低风险。在这个项目中,可能先将问题数据导入到临时表,进行处理后再与原始表进行合并。 4. front_06、05、0601文件: 这些文件...
3. 修改和删除存储过程:可以使用 ALTER PROCEDURE 语句来修改存储过程,使用 DROP PROCEDURE 语句来删除存储过程。 在存储过程中使用参数: 1. 输入参数:可以在存储过程中使用输入参数,以便在执行存储过程时...
而`oracle存储过程.chm`则涵盖了存储过程的创建、调用、修改和删除等相关知识,以及如何在存储过程中使用各种PL/SQL特性。 总的来说,Oracle函数和存储过程是数据库开发的核心工具,通过深入学习和实践,你将能够更...
Oracle存储过程是预编译的SQL语句集合,可以包含数据处理逻辑,控制流语句以及用户定义的函数和过程。它们提高了应用程序性能,减少了网络流量,并提供了更好的安全性。 首先,让我们理解CodeSmith生成Oracle存储...
使用 PL/SQL procedure 可以实现大批量删除数据,该方法可以快速地删除大量数据,而不需要占用太多的系统资源。下面是一个示例代码: ```plsql create or replace procedure delBigTab(p_TableName in varchar2,p_...
2. **性能提升**:预编译的代码执行更高效,尤其是当操作涉及大量数据时。 3. **安全**:通过权限管理,只允许用户执行存储过程,而不是直接操作数据。 4. **降低网络负载**:减少客户端与服务器之间的通信次数。 ...
本存储过程提供了一种有效的方法,用于将Oracle表数据导出为TXT或CSV格式,并且具备批量删除功能,适用于需要定期处理大量数据的应用场景。通过理解上述代码,我们可以更好地掌握如何利用Oracle的内置函数和存储过程...
Oracle存储过程是数据库管理系统Oracle中的一种重要特性,它是一组预先编写并存储在数据库服务器上的PL/SQL代码块,主要用于执行特定的任务。存储过程的主要优点包括: 1. 预编译和优化:存储过程在首次创建时会被...
总结来说,Oracle存储过程是一种强大的工具,能够提高代码的复用性和数据库的效率,同时增强数据的安全性和一致性。它们在数据库设计和开发中起着关键作用,尤其对于需要大量数据库操作的复杂应用,存储过程的使用...
在Oracle中,大量删除数据后,表所占用的物理空间通常不会立即释放,这是因为Oracle采用了高水位标记的机制。这意味着即使数据被删除,空间仍可能被标记为已使用,无法被新数据复用,除非执行`TRUNCATE TABLE`或重建...