SQL 使用多个 DELETE 查询获取文件中已删除行的总数
SQL Obtain total amount of deleted lines in file with multiple DELETE queries
我举个例子
在具有一百个或更多删除查询的 SQL 脚本中,输出应如下所示:
注意:不能使用唯一的删除查询进行删除。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
删除了 1 行。
提交完成。
是否可以获取像这样删除的总行数。
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
16 row deleted.
Commit complete.
我也可以对更新或插入命令有效。
SQL%ROWCOUNT
就是想到的。然而,不幸的是,我无法让它在 SQL 级别工作。这是一个示例:它是一个 .SQL 脚本,它设置一个变量,从两个表中删除一些行,然后 尝试 计算已删除行的总数。
var total number;
delete from a where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;
delete from b where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;
print total
当我 运行 它时,我得到:
SQL> @p
3 rows deleted.
PL/SQL procedure successfully completed.
1 row deleted.
PL/SQL procedure successfully completed.
TOTAL
----------
总数是 NULL
,因为 SQL%ROWCOUNT
是 NULL
(我知道;我尝试使用 NVL(SQL%ROWCOUNT, -1)
结果是 -2
。
但是,如果您切换到 PL/SQL - 通过将 DELETE
语句包含在 BEGIN-END
中这可能是可能的 - 那么会有一些改进。新的 .SQL 脚本:
set serveroutput on
declare
l_total number := 0;
begin
delete from a where deptno = 10;
l_total := l_total + sql%rowcount;
delete from b where deptno = 10;
l_total := l_total + sql%rowcount;
dbms_output.put_line('Deleted total of ' || l_total || ' rows');
end;
/
测试:
SQL> @p
Deleted total of 4 rows
PL/SQL procedure successfully completed.
如果能满足您的需求,那很好。如果没有,恐怕我不知道该怎么做。
我举个例子
在具有一百个或更多删除查询的 SQL 脚本中,输出应如下所示: 注意:不能使用唯一的删除查询进行删除。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 删除了 1 行。 提交完成。
是否可以获取像这样删除的总行数。
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
16 row deleted.
Commit complete.
我也可以对更新或插入命令有效。
SQL%ROWCOUNT
就是想到的。然而,不幸的是,我无法让它在 SQL 级别工作。这是一个示例:它是一个 .SQL 脚本,它设置一个变量,从两个表中删除一些行,然后 尝试 计算已删除行的总数。
var total number;
delete from a where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;
delete from b where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;
print total
当我 运行 它时,我得到:
SQL> @p
3 rows deleted.
PL/SQL procedure successfully completed.
1 row deleted.
PL/SQL procedure successfully completed.
TOTAL
----------
总数是 NULL
,因为 SQL%ROWCOUNT
是 NULL
(我知道;我尝试使用 NVL(SQL%ROWCOUNT, -1)
结果是 -2
。
但是,如果您切换到 PL/SQL - 通过将 DELETE
语句包含在 BEGIN-END
中这可能是可能的 - 那么会有一些改进。新的 .SQL 脚本:
set serveroutput on
declare
l_total number := 0;
begin
delete from a where deptno = 10;
l_total := l_total + sql%rowcount;
delete from b where deptno = 10;
l_total := l_total + sql%rowcount;
dbms_output.put_line('Deleted total of ' || l_total || ' rows');
end;
/
测试:
SQL> @p
Deleted total of 4 rows
PL/SQL procedure successfully completed.
如果能满足您的需求,那很好。如果没有,恐怕我不知道该怎么做。