Sql 在Oracle中执行删除/插入操作后返回记录数

Sql 在Oracle中执行删除/插入操作后返回记录数,sql,oracle,stored-procedures,plsql,count,Sql,Oracle,Stored Procedures,Plsql,Count,我想返回在存储过程中执行操作前后的记录数。我查找了一个本应用于返回表中行数的函数。但是,它不起作用。有什么帮助吗 类似的: 该过程仅包含动态SQL(执行即时命令)。代码太大,无法粘贴到此处(而且是机密代码) 真正的动机是,我想知道一个表在insert/delete命令之前(在execute immediate中)包含了多少条记录,以及在insert/delete操作之后它包含了多少条记录 我想将过程的日志存储在另一个表(一种日志表)中,该表跟踪从正在操作的表中插入/删除的行数 e、 g 程序主体

我想返回在存储过程中执行操作前后的记录数。我查找了一个本应用于返回表中行数的函数。但是,它不起作用。有什么帮助吗

类似的:

该过程仅包含动态SQL(执行即时命令)。代码太大,无法粘贴到此处(而且是机密代码)

真正的动机是,我想知道一个表在insert/delete命令之前(在execute immediate中)包含了多少条记录,以及在insert/delete操作之后它包含了多少条记录

我想将过程的日志存储在另一个表(一种日志表)中,该表跟踪从正在操作的表中插入/删除的行数

e、 g

程序主体

create or replace procedure vector as 

begin

-- select count(*) from some_table 

execute immediate 'delete from some_table
where trunc(creation_date) >= trunc(sysdate) - 7';

execute immediate 'insert into log_table values
(''Procedure Name'',''Insert'', sysdate,''....'')';

-- select count(*) from some_table

execute immediate 'insert into some_table ....';

execute immediate 'insert into log_table values
(''Procedure Name'',''Insert'', sysdate,''....'')';

-- select count(*) from some_table

end vector;

基本要求:我希望将某个_表的计数(*)插入到log_表中

您到底想获取什么数据

如果是受您的命令影响的行数-它应该是SQL%ROWCOUNT(在执行每个单独的命令之后。它不会“求和”过程中的所有修改,如果这是您需要的-您必须在每次插入/删除/更新之后手动求和)

但是,如果希望获得表中的行总数,则应该运行

SELECT count(*) from TABNAME
在执行命令之前和之后(使用它的性能)

您还可以将这两种方法结合起来-在过程开始时运行count(),并使用SQL%ROWCOUNT来计算您修改的行数,并假设表现在有count()-ROWCOUNT(of deletes)

请记住,Oracle在默认情况下会显示执行count(*)查询时(在执行当前事务命令之后)表中的记录数,因此您在不使用rowcount的情况下看到的更改可能包括并发更改。有关更多信息,请阅读Oracle隔离级别

此外,在运行count(*)查询和“delete”/“update”子句之间可能会同时发生更改,因此请考虑在特定情况下可能发生的场景


如果您需要更详细的代码审查,请更新您执行的程序/查询的相关部分。

请显示您正在使用的程序,并根据您期望的行为更多地定义“不工作”;你观察到的行为;以及产生了什么错误消息(如果有的话)。您需要进一步阐述您的具体想法。如果要获取受DML语句影响的大量记录,请使用
SQL%ROWCOUNT
隐式游标属性。要在执行任何DML之前(为什么?)获取记录数,您需要查询一个表。
SELECT count(*) from TABNAME