SQL*加上自定义汇总报告

SQL*Plus Custom Summary Report

我需要生成如下所示的摘要报告:

我的问题是,

  1. 我不知道如何在此自定义报告中填写计数数据。
  2. 我不知道如何将它放在文本文档中像上面那样的 table 视图中。不是 HTML.

到目前为止,我只知道如何在没有 table 视图的情况下处理第一行和第一列。

这是我的代码。

SET HEADING OFF;
SET LINESIZE 200;
SET SPACE 0; 
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET MARKUP HTML OFF SPOOL OFF;
SET TERMOUT OFF; --Do not show output to the screen.
SET NEWPAGE NONE; --Remove the first blank line at the top of the page and between queries.

TTITLE LEFT "REPORT NAME" RIGHT "PAGE : " SQL.PNO SKIP 1 -
LEFT        "--------------------------------" RIGHT "DATE : " _DATE SKIP 1 -
LEFT "A) TOTAL RECORDS " RIGHT total_records; -- Cannot output variable in the title.
LEFT "B) MATCHED RECORDS " RIGHT matched_records; -- Cannot output variable in the title.
LEFT "C) UNMATCHED RECORDS " RIGHT matched_records; -- Cannot output variable in the title.
BTITLE LEFT "E N D";

total_records 是一个 insert into 语句。

SELECT COUNT(*) INTO total_records FROM TABLE;

我没有做过匹配记录和不匹配记录。但是我能想到的唯一办法

  1. Select 一个语句变成一个游标。
  2. 循环进入光标。
  3. 有匹配时增加匹配计数。
  4. 一旦循环结束。不匹配计数 = 总计数 - 匹配计数。

我认为这不是最有效的方法。但是,如果你有更好的方法,请告诉我。

像这样的东西能敲响警钟吗?示例基于 Scott 的示例架构:

SQL> select 'Total records' name, count(*) cnt
  2    from emp
  3  union all
  4  select 'Matched count', sum(case when deptno = 10 then 1 else 0 end)
  5    from emp
  6  union all
  7  select 'Unmatched count', sum(case when deptno = 10 then 0 else 1 end)
  8    from emp;

NAME                   CNT
--------------- ----------
Total records           14
Matched count            3
Unmatched count         11

SQL>