oracle - 如何将 pl/sql 循环给出的数值加起来为一个值?
问题描述
我有一个输出到 .csv 文件的程序,它基本上为某些值生成一个标题,然后列出下面的值。我正在尝试调整该代码以将所有这些值相加。我会将它们放在“TOTAL”或类似文件下的同一 csv 文件中的另一个标题中。
我还没有对此进行任何尝试,因为老实说,我对如何将循环输出产生的值相加感到困惑。
我的代码基本上是,这个
create or replace procedure PROJECT is
--variables
l_dblink varchar2(100) := 'DB1';
ROW_COUNT number;
file_handle UTL_FILE.file_type;
BEGIN
utl_file.put_line(file_handle, 'OWNER,TABLE_NAME,ROW_COUNT');
--main loop
for rws in (select /*+parallel */ owner, table_name
from dba_tables@DB1 a
where table_name in (select table_name
from meta_table
where driver_table is not null
and additional_joins is null)
and a.owner in (select distinct schema
from meta_table c)
order by table_name)
loop
execute immediate 'select count(*) from ' ||rws.owner||'.'||rws.table_name || '@' || l_dblink into ROW_COUNT;
utl_file.put_line(file_handle,
rws.OWNER || ',' ||
rws.TABLE_NAME || ',' ||
ROW_COUNT);
end loop;
END PROJECT;
/
这给出了这样的输出:
OWNER TABLE_NAME ROW_COUNT
SCOUSE_BOB KELLOGS 1000
SCOUSE_BOB UNCLE_TOBY 4000
我寻求的是一种将这些 ROW_COUNTS 相加的方法。
我将添加一个新的 utl_file.put_line
TOTALS
但是如何让 PL/SQL 总结这些值并产生“5000”?
谢谢!
解决方案
引入一个变量来保存总计。在循环内添加单独的总和。utl_file.put_line
显示它将在循环之外。
create or replace procedure PROJECT is
--variables
l_dblink varchar2(100) := 'DB1';
ROW_COUNT number;
file_handle UTL_FILE.file_type;
v_total number := 0;
BEGIN
utl_file.put_line(file_handle, 'OWNER,TABLE_NAME,ROW_COUNT');
--main loop
for rws in (select /*+parallel */ owner, table_name
from dba_tables@DB1 a
where table_name in (select table_name
from meta_table
where driver_table is not null
and additional_joins is null)
and a.owner in (select distinct schema
from meta_table c)
order by table_name)
loop
execute immediate 'select count(*) from '
||rws.owner||'.'||rws.table_name
|| '@' || l_dblink into ROW_COUNT;
v_total := v_total + ROW_COUNT;
utl_file.put_line(file_handle,
rws.OWNER || ',' ||
rws.TABLE_NAME || ',' ||
ROW_COUNT);
end loop;
utl_file.put_line(file_handle,
'Total '|| v_total
);
END PROJECT;
/
推荐阅读
- r - 使用 R 计算重量
- ios - 无法对 libSkiaSharp 进行代码设计
- javascript - 即使在 index.html 中添加了所有必要的脚本后,Bootstrap 5 下拉按钮也不起作用
- c++ - 错误:从“int”分配给“int *”的不兼容整数到指针转换
- c# - 使用相同的源列表同步多个数据网格视图
- vue.js - 如何从 vuejs3 将数据动态添加到 Primevue 折线图?
- javascript - 使用正则表达式,我可以将 url 更改为 html 图像标签
- json - 返回 '_Future 的实例
- >' 而不是 json
- google-admin-sdk - 当我使用 REST 资源时收到很多警告:userUsageReport
- c# - 在 TextBox.Text 中退格后 Regex.IsMatch 不起作用