Report Headers and Footers

Report headers and footers work much like page headers and footers, except that they print only once in a report. A report header prints at the beginning of the report, after the first page title and before the first detail line. A report footer prints at the end of a report, after the last detail line and before the final page footer. Figure 7-1 illustrates this by showing how the different types of headers and footers print relative to each other in a three-page report.

Figure 7-1. Report headers and footers versus page headers and footers

figs/sqp2_0701.gif

You define a report header using the REPHEADER command. The REPFOOTER command defines a report footer. The parameters you can use with REPHEADER and REPFOOTER are the same as, and work the same way as, those used with the TTITLE command.

One use for a report header is to define a report title that prints only on the first page of a report, leaving only column titles at the top of all subsequent pages. You can use a report footer to mark the end of a report, so you know for sure whether you have all the pages. Here is an example showing how these things can be done.

Recall that the Project Hours and Dollars Report from Example 5-5 used the following commands to define page headers and footers:

TTITLE CENTER 'The Fictional Company' SKIP 3 -

 LEFT 'I.S. Department' -

 RIGHT 'Project Hours and Dollars Report' SKIP 1 -

 LEFT '============================================================='

 

BTITLE LEFT '=============================================================' -

 SKIP 1 -

 RIGHT 'Page ' FORMAT 999 SQL.PNO

 

Timestamping Your Spool Files

If you have a report that you run on a regular basis and you want to preserve the spooled output from each run, you can use the technique described in "Getting the Current Date into a Header" to generate spool file names that include the date and time:

SET TERMOUT OFF

COLUMN time_now NEW_VALUE spool_time

SELECT TO_CHAR(SYSDATE,'YYYYMMDD-HHMISS') time_now

FROM dual;

SPOOL report&spool_time

SELECT ...

SPOOL OFF
 

An example of a spool filename resulting from this script fragment is the name report20040627-075632.lst (the extension defaults to .lst ). In this way, you can use the current date and time to generate a unique spool file name each time you run a script. If you require granularity in excess of one second, use SYSTIMESTAMP instead of SYSDATE.

Please note that I don't recommend this technique as a reliable way of generating unique filenames in a multiuser scenario because two users can run the same script simultaneously . The technique is handy, though, in preserving the output from multiple runs of a cron job.

 

The TTITLE command defined a title containing the name of the report, which in this case was printed on each page of the report. By replacing TTITLE with REPHEADER and adding a command to turn TTITLE off, you will cause the title containing the report name to print only once. The following example shows how this is done and also defines a report footer:

TTITLE OFF

REPFOOTER CENTER '*** End of Hours and Dollars Report ***'

REPHEADER CENTER 'The Fictional Company' SKIP 3 -

 LEFT 'I.S. Department' -

 RIGHT 'Project Hours and Dollars Report' SKIP 1 -

 LEFT '============================================================='

 

BTITLE LEFT '=============================================================' -

 SKIP 1 -

 RIGHT 'Page ' FORMAT 999 SQL.PNO

 

The report footer, defined with the REPFOOTER command, will print on the last page, after the last detail record, to mark the end of the report. Example 7-5 shows this new incarnation of the Project Hours and Dollars Report.

Example 7-5. Project Hours and Dollars Report formatted using report headers and footers

SET ECHO OFF



--Set up pagesize parameters

SET NEWPAGE 1

SET PAGESIZE 55



--Set the linesize, which must match the number of equal signs used

--for the ruling lines in the headers and footers.

SET LINESIZE 61



--Set up page headings and footings

TTITLE OFF

REPFOOTER CENTER '***End of Hours and Dollars Report ***'

REPHEADER CENTER "The Fictional Company" SKIP 3 -

 LEFT "I.S. Department" -

 RIGHT "Project Hours and Dollars Report" SKIP 1 -

 LEFT "============================================================="



BTITLE LEFT "=============================================================" -

 SKIP 1 -

 RIGHT "Page " FORMAT 999 SQL.PNO



--Format the columns

COLUMN employee_name HEADING "Employee Name" FORMAT A20 WORD_WRAPPED

COLUMN project_name HEADING "Project Name" FORMAT A20 WORD_WRAPPED

COLUMN hours_logged HEADING "Hours" FORMAT 9,999

COLUMN dollars_charged HEADING "DollarsCharged" FORMAT 9,999.99



--Turn off feedback and set TERMOUT off to prevent the

--report being scrolled to the screen.

SET FEEDBACK OFF

SET TERMOUT OFF



--Execute the query to generate the report.

SELECT e.employee_name,

 p.project_name,

 SUM(ph.hours_logged) hours_logged,

 SUM(ph.dollars_charged) dollars_charged

 FROM employee e INNER JOIN project_hours ph

 ON e.employee_id = ph.employee_id

 INNER JOIN project p

 ON p.project_id = ph.project_id

GROUP BY E.EMPLOYEE_ID, E.EMPLOYEE_NAME,

 P.PROJECT_ID, P.PROJECT_NAME;

EXIT

 

When you run the script in Example 7-5, your results will be as follows :

The Fictional Company





I.S. Department Project Hours and Dollars Report

=============================================================

 Dollars

Employee Name Project Name Hours Charged

-------------------- -------------------- ------ ------------

Marusia Churai Corporate Web Site 20 ,380.00

Marusia Churai Enterprise Resource 24 ,056.00

 Planning System

...

Mykola Leontovych Data Warehouse 9 ,089.00

 Maintenance



Mykola Leontovych VPN Implementation 16 ,936.00

=============================================================

 Page 1

...

 Dollars

Employee Name Project Name Hours Charged

-------------------- -------------------- ------ ------------

 Implementation



Igor Sikorsky Data Warehouse 4 0.00

 Maintenance

...

Mykhailo Verbytsky Data Warehouse 16 ,800.00

 Maintenance



Mykhailo Verbytsky VPN Implementation 16 ,800.00

 ***End of Hours and Dollars Report ***

....

=============================================================

 Page 3

 

As you can see, the report title printed only on the first page of the report. Subsequent pages began with the column titles. The report footer printed on the last page following the last detail line. When you are working with report headers and footers, keep in mind that these report elements still print within the context of a page. Page titles and footers print on each page regardless of whether a report header or footer prints on that page. Had the above report included a page title (TTITLE), the page title would have printed on the first page prior to the report header.

     

Introduction to SQL*Plus

Command-Line SQL*Plus

Browser-Based SQL*Plus

A Lightning SQL Tutorial

Generating Reports with SQL*Plus

Creating HTML Reports

Advanced Reports

Writing SQL*Plus Scripts

Extracting and Loading Data

Exploring Your Database

Advanced Scripting

Tuning and Timing

The Product User Profile

Customizing Your SQL*Plus Environment

Appendix A. SQL*Plus Command Reference

Appendix B. SQL*Plus Format Elements



Oracle SQL Plus The Definitive Guide, 2nd Edition
Oracle SQL*Plus: The Definitive Guide (Definitive Guides)
ISBN: 0596007469
EAN: 2147483647
Year: N/A
Pages: 151

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net