Previous | Table of Contents | Next |
Listing 22.9 creates a Master/Detail SQL*Plus Report by utilizing the SQL UNION command. In this example, there are six separate types of lines to be printed: the Salesperson (line 4), a line of dashes under the Salesperson (line 7), the detail line (line 10), a line of dashes under the detail total (line 14), a total line (line 17), and a blank line (line 21). There are six separate queries that have their output merged and sorted together by the SQL JOIN statement (see lines 6, 9, 13, 16, 19, and 23). When using JOIN to merge the output of two or more queries, the output result set must have the same number of columns. The headings are turned off (line 2) because regular SQL*Plus column headings are not desired for this type of report. The first column of each query has an alias column name of DUMMY. This DUMMY column is used to sort the order of the six types of lines (denoted by each of the six queries). The DUMMY columns only role is to maintain the order of the lines within the major sort field (SALES_REP_NO in this example), so the NOPRINT option is specified in line 3. Listing 22.10 shows the output of the Master/Detail SQL*Plus Report code.
Listing 22.9. Master/Detail SQL*Plus report code.
1: ttitle Sales Detail | by Sales Rep 2: set HEADINGS OFF 3: column DUMMY NOPRINT 4: select 1 DUMMY, SALES_REP_NO,Sales Person: || SALES_REP 5: from sales 6: UNION 7: select 2 DUMMY,SALES_REP_NO,-------------------- 8: from sales 9: UNION 10: select 3 DUMMY,SALES_REP_NO, rpad(CAR_MAKE,4) || || 11: to_char(SALE_AMT,$999,999.99) 12: from sales_detail 13: UNION 14: select 4 DUMMY,SALES_REP_NO, ---------- 15: from sales 16: UNION 17: select 5 DUMMY,SALES_REP_NO,Total: || 18: to_char(sum(TOTAL_SALES),$999,999.99)) 19: from sales 20: UNION 21: select 6 DUMMY,SALES_REP_NO, 22: from sales 23: order by 2,1,3 24: /
Listing 22.10. Output of Master/Detail SQL*Plus report code.
************************ Thur Apr 2 page 1 Sales Detail by Sales Rep Salesperson: Elizabeth ----------------------------- Chrysler $3,000 Chrysler $1,500 Nissan $2,000 Nissan $2,000 Nissan $1,500 Toyota $2,500 ---------- Total: $12,500 Salesperson: Emily ----------------------------- Ford $1,000 Ford $1,000 GM $2,000 GM $2,400 Nissan $2,000 Nissan $2,000 Toyota $1,000 Toyota $2,500 Toyota $2,500 ---------- Total: $16,400 Salesperson: Thomas ----------------------------- Chrysler $1,500 Ford $1,000 Ford $3,000 GM $1,400 GM $1,600 GM $3,000 Nissan $2,000 Toyota $1,000 ---------- Total: $16,400
Listing 22.11 creates a SQL*Plus Report utilizing different columns from different tables using the SQL UNION command. In this example, there are three different tables (see lines 8, 11, and 14) but there are only three columns of output. The first query contains the column names (see lines 6 and 7). This is due to the way the JOIN operator works. The queries after the first query must follow the number of columns and the type of column (text or numeric) based on the column definitions of the first query. The BREAK command (line 4) causes the OBJECT_NAME to print once and creates the blank line between the groupings of records. Listing 22.12 shows the output of Listing 22.11.
Tip:
The next example uses the JOIN feature to display output from two or more tables within the same report.
Listing 22.11. Multi table SQL*Plus report code.
1: column OBJECT_TYPE format a20 heading Object 2: column OBJECT_NAME format a8 heading Name 3: column COMMENT format a8 heading Comments 4: break on OBJECT_TYPE skip 1 5: ttitle System Summary Report 6: select Program OBJECT_TYPE, program_name OBJECT_NAME, 7: program_comments COMMENT 8: from program_table 9: UNION 10: select Command Language,cl_name, assoc_system 11: from cl_table 12: UNION 13: select Files,file_name, File Size = || file_size || Bytes 14: from file_table 15: /
Listing 22.12. Output of multi table SQL*Plus report code.
Thr Apr 2 page 1 System Summary Report Object Name Comments -------------------- ---------- -------------------------------- Programs AM1 Algebra Test 1 AM2 Algebra Test 2 AM3 Algebra Test 3 Command Language CL1 AM1 CL2 AM2 CL3 AM3 Files AM1.TST File Size = 1200 Bytes AM2.TST File Size = 3000 Bytes AM3.TST File Size = 2200 Bytes
Listings 22.13 (method 1) and 22.14 (method 2) produce the exact same output as seen in Listing 22.15. Both of these methods will produce reports with information in fixed or predefined positions. Both of these methods could be utilized to print information on a pre-printed form. These particular examples were designed to be started from inside another process such as SQL*Forms because the only input parameter is an Oracle ROWID used to read and process a single row from the database (lines 1 and 26 in Listing 22.13, lines 1 and 42 in Listing 22.14).
These examples utilize the concatenation feature of SQL (||) to blend text between database fields. Each column in the SQL statement represents an individual line in the report. Both examples have the standard column headings feature turned off (line 3 of Listing 22.13, line 4 of Listing 22.14). Both examples have a one-to-one relationship between a SQL column and a line of output. The methods differ in how the columns are formatted to create the individual lines.
Previous | Table of Contents | Next |