sql - SQL 通过多个 DELETE 查询获取文件中已删除行的总数
问题描述
我举个例子
在具有一百个或更多删除查询的 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
了结果。
DELETE
但是,如果您切换到 PL/SQL(通过将您的语句包含在其中,这可能是可能的),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.
如果这能满足你的需求,那很好。如果没有,恐怕我不知道如何做你想做的事。
推荐阅读
- amazon-web-services - 如何判断kubernetes节点自动终止的原因?
- katalon-studio - Katalon 项目中的文件夹含义
- git - 是否每个人在 bitbucket 存储库的降价文件中都有 Plantuml?
- sql - 多项选择标准
- javascript - 使用 get() 从 node.js 发送数据到 Angular
- batch-file - cmd forfiles 打印每个单词的文件路径不工作
- c# - DataTables 警告:table id=bootstrap-data-table - 无效的 JSON 响应 - DataTables JS 插件
- webpack - 安装 npm webpack-cli 导致无法理解的警告
- c - 使用 HCS12 微控制器防止读取损坏
- php - 使用 JQuery 向表中添加值。使用 PHP 循环创建的表