Skip Headers

Oracle Reports Building Reports
10g (9.0.4)

Part Number B10602-01
Go To Documentation Library
Home
Go To Table Of Contents
Contents
Go To Index
Index

Go to previous page Go to next page

2
Advanced Concepts

This chapter introduces the concepts for advanced users of Oracle Reports. Each topic in this chapter is also included in the Advanced Concepts section of Reports Builder online help (see Section 3.1.1, "Using the online help").

Topics are grouped into the following sections:

2.1 Reports

The topics in this section build on the basic concepts discussed in Section 1.2, "Reports".

2.1.1 About report titles

You can add a title to a report in either of the following ways:

When you use the Report Wizard to add a title and do not select a template for your report output, the title is inserted into the margin of the report with default attributes defined by Reports Builder. You can modify the attributes in the Paper Layout view.

When you use the Report Wizard to add a title, and do select a predefined template or a user-defined template file for your report output, Reports Builder looks for a boilerplate text object named B_OR$REPORT_TITLE defined for the selected template:

For layouts created using the Report Block Wizard, the title is inserted into the new layout as a group title rather than into the margin of the report. In this case, the attributes are set per the Default properties (under the Title node in the Property Inspector) of the selected template, and B_OR$REPORT_TITLE is ignored. If you do not select a template, the title uses the default attributes defined by Reports Builder.

See also

Section 3.5.6, "Adding a title to a report"

Section 3.12.5, "Formatting the report title in a template"

Section 2.7.1, "About templates"

2.1.2 About report sectioning and sections

Report sectioning enables you to define multiple layouts in the same report, each with a different target audience, output format, page layout, page size, or orientation. You can define up to three report sections, each with a body area and a margin area: the names of the sections are Header, Main, and Trailer. By default, a report is defined in the Main section. In the other sections, you can define different layouts, rather than creating multiple separate reports. For example, a single report can include an executive summary for senior management in one section and also a detailed breakdown for individual managers in another section. If you wish, you can use the margin and body of the Header and Trailer sections to create a Header and Trailer page for your reports.

In the Object Navigator, the report sections are exposed in the Object Navigator under the Paper Layout node as Header Section, Main Section, and Trailer Section.

For detailed information about section-level distribution, see Chapter 36, "Bursting and Distributing a Report". This chapter also covers distribution based on a repeating section, then e-mail those sections based on the distribution.xml.

Examples

Example 1

You can use sectioning and distribution to publish your report output in HTML, and also send a Postscript version to the printer.

Example 2

You can send an executive summary of the report to a senior management, and also mail detailed breakdowns to individual managers. In this example, a single report with two report sections needs to be created: a portrait-sized summary section and a landscape-sized detail Section. Associating the detail section with a data model group that lists the managers and then altering the destination on each instance of the data model group sends the output to the appropriate managers.

See also

Section 2.8.3, "About report distribution"

Section 3.10.1, "Displaying a section layout view"

Section 3.10.2, "Creating a default layout for a section"

2.1.3 About the report unit of measurement

A report can be defined using inches, centimeters, or points. The unit of measurement is independent of the device on which you build the report. As a result, you can design reports that will run on any platform on which Reports Builder runs. You can change a report's unit of measurement in these ways:

2.1.4 About the report dimensions

A report page can have any length and any width. Because printer pages may be smaller or larger than your paper report's "page," the concept of physical and logical pages is used. A physical page is the size of a page that is output by your printer. A logical page is the size of one page of your report; one logical page may be made up of multiple physical pages.

For each section (header, main, trailer) of a report:

In this example, one logical page is made up of six physical pages. The logical page is three physical pages wide and two physical pages high. Consequently, Horizontal Panels per Page size is 3 and Vertical Panels per Page size is 2. If you wanted the logical page to be two physical pages wide and three physical pages high, you would specify a Horizontal Panels per Page size of 2 and a Vertical Panels per Page size of 3.

Figure 2-1 Report dimensions

Text description of ch4log01.gif follows.

Text description of the illustration ch4log01.gif

2.1.5 About fonts in reports

For detailed information about using and adding fonts in Oracle Reports, including font configuration files, font aliasing, troubleshooting font issues, and font types, refer to the chapter "Fonts in Oracle Reports" in the Oracle Application Server Reports Services Publishing Reports to the Web manual, available on the Oracle Technology Network Oracle Reports Documentation page (http://otn.oracle.com/docs/products/reports/content.html).

2.1.6 About conditional formatting

Using the Conditional Formatting and Format Exception dialog boxes, you can specify output formatting attributes (font and/or color) for a selected layout object based on conditions that exist. The conditions that you define are called format exceptions.

You can display the Conditional Formatting dialog box from the Paper Layout view or Paper Design view in any of the following ways:

The Format Exception dialog box displays when you click New or Edit in the Conditional Formatting dialog box, and enables you to quickly and easily specify output formatting attributes for a selected layout object based on defined conditions. After you specify conditions and formatting for the current layout object in the Format Exception dialog box, the entire definition is exported to a PL/SQL format trigger. If a format trigger already exists for the layout object, the definition in the Format Exception dialog box overwrites the existing trigger code when you confirm the Reports Builder prompt.

You can edit the format trigger manually via the PL/SQL Editor; however, if you subsequently modify the definition using the Format Exception dialog box, Reports Builder displays a prompt to overwrite the existing format trigger.

See also

Section 3.9.1.5, "Applying conditional formatting to a layout object"

2.1.7 About nested matrix reports

A nested matrix report is a matrix report in which at least one parent/child relationship appears within the matrix grid.

A nested matrix report has more than two dimensions; therefore, it has multiple dimensions going across and/or down the page. For example, look at the report below (Figure 2-2). Notice that for each year there is a nested list of related departments. Also notice that the list of jobs (the across values) appears only once. Because the job values appear only once, a summary of each category of jobs can be made to line up with the values it summarizes.

For an example, see the example report in Chapter 26, "Building a Nested Matrix Report".

See also

Section 2.3.7, "About matrix objects"

Section 1.3.7, "About matrix reports"

2.1.8 About matrix with group reports

A matrix with group report is a group above report with a separate matrix for each value of the master group. For example, for each year (master) in the report below there is a unique matrix that contains only that year's departments and jobs. This means that a summary of each job category may not line up with the values it summarizes because the position of each job category in the matrix may vary for each year.

A multi-query matrix with group report is similar to a nested matrix report in that it has more than two dimensions. For example, in the following report, notice that for each year there is a nested list of related departments.

Figure 2-2 Sample matrix with group and nested matrix report

Text description of a_mtx_grp_rpts1.gif follows.

Text description of the illustration a_mtx_grp_rpts1.gif

The advantage of using multiple queries is that you get a real break, or master/detail relationship, for the nesting groups (e.g., notice that in the multi-query example above, Year 80 shows only record 20; with a single query, Year 80 would show all records whether or not they contain data for Year 80). If you want to suppress detail records that do not contain data for a particular master record, you must use multiple queries.

For a complete example, see the example report in Chapter 27, "Building a Matrix with Group Above Report".

See also

Section 2.3.7, "About matrix objects"

Section 1.3.7, "About matrix reports"

2.2 Web Reports

The topics in this section build on the basic concepts discussed in Section 1.2.2, "About Web reports".

See also

Section 1.2.2, "About Web reports"

2.2.1 About JavaServer Pages (JSPs) and servlets

Oracle Reports supports JavaServer Pages (JSPs) as the underlying technology to enable you to enhance Web pages with information retrieved using Reports Builder. JSP technology is an extension to the Java servlet technology from Sun Microsystems that provides a simple programming vehicle for displaying dynamic content on a Web page. A JSP is an HTML page with embedded Java source code that is executed in the Web server or application server. The HTML provides the page layout that is returned to the Web browser, and the Java provides the business logic.

JSPs keep static page presentation and dynamic content generation separate. Because JSPs cleanly separate dynamic application logic from static HTML content, Web page designers who have limited or no Java programming expertise can modify the appearance of the JSP page without affecting the generation of its content, simply using HTML or XML tags to design and format the dynamically-generated Web page. JSP-specific tags or Java-based scriptlets can be utilized to call other components that generate the dynamic content on the page.

JSPs have the .jsp extension. This extension notifies the Web server that the page should be processed by a JSP container. The JSP container interprets the JSP tags and scriptlets, compiles the JSP into a Java servlet and executes it, which generates the content required, and sends the results back to the browser as an HTML or XML page.

A JSP can be accessed and run from a browser-based client, typically over the Internet or a corporate intranet. Unlike traditional client-server applications, JSP applications:

When a JSP is called for the first time, it is compiled into a Java servlet class and stored in the Web server's memory. Because it is stored in memory, subsequent calls to that page are very fast, thereby avoiding the performance limitations seen with traditional Common Gateway Interface (CGI) programs, which spawn a new process for each HTTP request.

For additional background information about JSP technology, see the JavaSoft web site at http://www.javasoft.com/products/jsp/.

2.2.1.1 Using JSPs in Oracle Reports

In Oracle Reports, you use JSPs to embed data retrieved using the data model into an existing Web page to create a JSP-based Web report. You can create new JSP reports, or save existing reports as JSP reports. New reports are by default saved as JSP reports. The benefit of saving reports as JSPs is that JSPs are text files that are easy to edit as opposed to, for example, the binary .rdf format. When a report is saved as a JSP file, the data model is embedded using XML tags. The entire report can now be defined using XML tags and saved as an XML file.

Using the Oracle Reports custom JSP tags, you can easily add report blocks and graphs to existing JSP files. These tags can be used as templates to enable you to build and insert your own data-driven Java component into a JSP-based Web report. Not only can you edit the HTML or XML code that encapsulates the report block, but you can also edit the report block in the JSP itself, by modifying, adding or deleting their bodies and attributes.

Not only can you edit the HTML code that encapsulates the report block, but you can also edit the report block in the JSP itself, by modifying, adding or deleting their bodies and attributes.

The Report Editor's Web Source view displays the source code for your Web report, including HTML, XML, and JSP tags.

In prior releases, Oracle Reports introduced Web links that you can add to paper-based reports, which become active when you display your paper report in a Web browser or PDF viewer. For JSP reports, hyperlinks have to be created manually, and if the hyperlinks need to substitute data values, the data values must be provided via the rw:field JSP tag. For example:

<a href="http://server/path/rwservlet?report=department.jsp&p_deptno=<rw:field
id="F_Deptno" src="Deptno"/>"> <rw:field id="F_Deptno" src="Deptno">10</rw:field> </a>
See also

2.2.2 About previewing JSP-based Web reports

You can preview a JSP-based Web report by clicking the Run Web Layout button in the toolbar, or by choosing Program > Run Web Layout, to run the Web Source. Reports Builder displays Web reports in your default browser.


Note:

If Netscape 7.0 is your default browser, the browser may not display. You can work around this bug by making a copy of the Netscape 7.0 executable, naming it netscape.exe; with this name, the browser will display as expected.


You do not need to have the Reports Server configured to use this functionality. Reports Builder includes an embedded OC4J (Oracle Container for Java) server in it. If you are using this option to preview a JSP report locally, if your JSP depends on external files, such as images, or if you want to check the generated Java files, it is important to understand what Reports Builder does with the temporary files. Each instance of the Builder has its own OC4J server listening on different port, so you can have multiple Builder sessions at a time. If not specified, the Builder automatically looks for a free port in the default range.

A JSP gets converted into a .java file and compiled into a class file. When the class file is executed, it will return HTML in an .html file. This file and the .java and .class files are all located in the $REPORTS_TEMP/docroot directory. $REPORTS_TEMP can be passed in as a command line parameter to Reports Builder, thus allowing you to override the default location for the docroot directory. The contents of the docroot directory are cleaned up when you exit the Reports Builder.

Document Root

By default, the Reports Builder document root is the docroot directory under the directory specified by the $REPORTS_TMP environment variable (e.g., c:/temp/docroot). The end user can override this default docroot from the command line (using the WEBSERVER_DOCROOT command line keyword). If your JSP depends on external files, such as images, style sheets, and so on, make sure you copy them into the docroot directory. Better yet, you can specify the WEBSERVER_DOCROOT command line value to be your document root directory.

Document Root Structure

A JSP gets translated into a .java file and compiled into a .class file. When the class file is executed, it will return HTML in an .html file. This file and the .java and .class files are all located in the docroot directory. The docroot directory structure looks as follows after running emp.jsp (note that we use the default docroot, which is $REPORTS_TMP/docroot):

temp
docroot
3000 working directory for instance of the Builder
default
defaultWebApp temporary JSP working directory temp _pages
_empxxx.class compiled Java class _empxxx.java translated Java file log OC4J log directory global-application.log server.log orion-conf OC4J configuration files directory stderr.log debug log when WEBSERVER_LOG=yes stdout.log 3002 another instance's working directory css template style sheets images template images WEB-INF lib reports_tld.jar web.xml rwerror.jsp template error JSP empxxx.jsp working copy of emp.jsp empxxx.html resulting output
Usage notes
See also

Section 3.7.15.4, "Displaying report output in your Web browser"

Section 3.7.16.3, "Printing a report from your Web browser"

2.2.3 About Web links for HTML output

This topic discusses the Web links that you can add to paper-based reports that will become active when you run your report to an HTML file and display it in a Web browser.

In most cases, you can define Web links in an object's Property Inspector. You can specify column and field names in the link value to create dynamic links at runtime. If you require more complex implementation of Web links, such as conditional settings, you must specify the link using PL/SQL and the Reports Builder built-in packaged procedure SRW.SET_ATTR.

Reports output in HTML format can include the following types of Web links:

Additionally, your report can include the following headers and footers that use escapes to add HTML tags to your paper-based report:

2.2.4 About Web links for PDF output

This topic discusses the Web links that you can add to paper-based reports that will become active when you run your report to a PDF file and display it in a PDF viewer.

Reports output in PDF format can include the following types of Web links:

In most cases, you can define Web links in an object's Property Inspector. You can specify column and field names in the link value to create dynamic links at runtime. If you require more complex implementation of Web links, such as conditional settings, you must specify the link using PL/SQL.

2.2.5 About hyperlinks

A hyperlink is an attribute of an object that specifies a hypertext link to either of the following destinations:

You can set the Additional Hyperlink Attributes property to specify additional HTML to be applied to the hyperlink.

See also

Section 3.6.7.1.7, "Creating a hyperlink using the Property Inspector"

Section 3.6.7.2.7, "Creating a hyperlink using PL/SQL"

2.2.6 About hyperlink destinations

A hyperlink destination is an attribute of an object that identifies the destination of a hypertext link.

See also

Section 3.6.7.1.8, "Creating a hyperlink destination using the Property Inspector"

Section 3.6.7.2.8, "Creating a hyperlink destination using PL/SQL"

2.2.7 About bookmarks

A bookmark is an attribute of an object that specifies a string that is a link to the object.

See also

Section 3.6.7.1.10, "Creating a bookmark using the Property Inspector"

Section 3.6.7.2.10, "Creating a bookmark using PL/SQL"

Section 3.6.7.1.11, "Creating a bookmark on break columns using the Property Inspector"

2.2.8 About application command line links

(PDF output only) An application command line link is an attribute of an object that specifies a command line to be executed when the object is clicked.

Restrictions

An object that is associated with a application command line link cannot also be the source of a Web link (a hyperlink).

See also

Section 3.6.7.1.9, "Creating an application command line link using the Property Inspector"

Section 3.6.7.2.9, "Creating an application command line link using PL/SQL"

2.2.9 About before and after escapes

See also

Section 3.6.7.1.1, "Creating an HTML document header using the Property Inspector"

Section 3.6.7.2.1, "Creating an HTML document header using PL/SQL"

Section 3.6.7.1.2, "Creating an HTML document footer using the Property Inspector"

Section 3.6.7.2.2, "Creating an HTML document footer using PL/SQL"

Section 3.6.7.1.3, "Creating an HTML page header using the Property Inspector"

Section 3.6.7.2.3, "Creating an HTML page header using PL/SQL"

Section 3.6.7.1.4, "Creating an HTML page footer using the Property Inspector"

Section 3.6.7.2.4, "Creating an HTML page footer using PL/SQL"

Section 3.6.7.1.5, "Creating an HTML Parameter Form header using the Property Inspector"

Section 3.6.7.2.5, "Creating an HTML Parameter Form header using PL/SQL"

Section 3.6.7.1.6, "Creating an HTML Parameter Form footer using the Property Inspector"

Section 3.6.7.2.6, "Creating an HTML Parameter Form footer using PL/SQL"

2.2.10 About style sheets

Style sheets (or cascading style sheets) refer to HTML extensions that provide powerful formatting flexibility. With style sheet support, your HTML documents can include any of the following:

This means that the sophisticated formatting in a report is preserved when you format the report as an HTML document. Without style sheet extensions, your HTML documents display only basic text formats and imported images. With style sheets, images of highly formatted text can be replaced with text objects of equivalent style, color, and font. Text objects can be positioned to overlay image objects. All text is fully searchable, and fewer images have to be downloaded.

To view an HTML document that takes advantage of style sheets, you must display it in a browser that supports style sheets.

Restrictions

The following elements are not supported by HTML style sheet extensions:

See also

Section 3.7.15.4, "Displaying report output in your Web browser"

Section 3.7.16.3, "Printing a report from your Web browser"

2.3 Data Model Objects

The topics in this section build on the basic concepts discussed in Section 1.7, "Data Model Objects".

2.3.1 About summary columns

A summary column performs a computation on another column's data. Using the Report Wizard or Data Wizard, you can create the following summaries: sum, average, count, minimum, maximum,% total. You can also create a summary column manually in the Data Model view, and use the Property Inspector to create the following additional summaries: first, last, standard deviation, variance.

If your report requires a customized computation, for example, one that computes sales tax, create a formula column (see Section 3.8.7, "Creating or editing a formula column").


Note:

For group reports, the Report Wizard and Data Wizard create n summary fields in the data model for each summary column you define: one at each group level above the column being summarized, and one at the report level. For example, if a report is grouped by division, and further grouped by department, then a summary column defined for a salary total would create fields for the sum of salaries for each division and each department group (group-level summaries), and the sum of all salaries (report-level summary).


See also

Section 3.8.8, "Creating a summary column"

2.3.2 About formula columns

A formula column performs a user-defined computation on the data of one or more column(s), including placeholder columns. For example, :ITEMTOT *.07 is a formula that performs a computation on one column, while :SAL + :COMM performs a computation using two columns in a record. You create formulas in PL/SQL using the PL/SQL Editor.


Note:

Formula columns should not be used to set values for parameters.


See also

Section 3.8.7, "Creating or editing a formula column"

Section 2.6.8, "About formulas"

2.3.3 About placeholder columns

A placeholder is a column for which you set the datatype and value in PL/SQL that you define. Placeholder columns are useful when you want to selectively set the value of a column (e.g., each time the nth record is fetched, or each time a record containing a specific value is fetched, etc.). You can set the value of a placeholder column in the following places:

See also

Section 3.8.9, "Creating or editing a placeholder column"

Section 2.6.8, "About formulas"

2.3.4 About referencing columns and parameters

You can reference user parameters, system parameters and columns as either bind references or lexical references.

2.3.4.1 About bind references

Bind references (or bind variables) are used to replace a single value in SQL or PL/SQL, such as a character string, number, or date. Specifically, bind references may be used to replace expressions in SELECT, WHERE, GROUP BY, ORDER BY, HAVING, CONNECT BY, and START WITH clauses of queries. Bind references may not be referenced in FROM clauses or in place of reserved words or clauses.

You create a bind reference by typing a colon (:) followed immediately by the column or parameter name. If you do not create a column or parameter before making a bind reference to it in a SELECT statement, Reports Builder will create a parameter for you by default.

Restrictions

Bind references must not be the same name as any reserved SQL keywords. For more information, see the Oracle9i Server SQL Language Reference Manual.

Examples

Example 1: SELECT clause

In the following example, the value of DFLTCOMM replaces null values of COMMPLAN in the rows selected.

SELECT CUSTID, NVL(COMMPLAN, :DFLTCOMM) COMMPLAN

FROM ORD;
Example 2: WHERE clause

The value of CUST is used to select a single customer.

SELECT ORDID, TOTAL

FROM ORD
WHERE CUSTID = :CUST;
Example 3: GROUP BY clause

All non-aggregate expressions such as NVL(COMMPLAN, :DFLTCOMM) in the SELECT clause must be replicated in the GROUP BY clause.

SELECT NVL(COMMPLAN, :DFLTCOMM) COMMPLAN, SUM(TOTAL) TOTAL

FROM ORD
GROUP BY NVL(COMMPLAN, :DFLTCOMM);
Example 4: HAVING clause 

The value of MINTOTAL is used to select customers with a minimum total of orders.

SELECT CUSTID, SUM(TOTAL) TOTAL

FROM ORD
GROUP BY CUSTID HAVING SUM(TOTAL) > :MINTOTAL;
Example 5:  ORDER BY clause

The value of SORT is used to select either SHIPDATE or ORDERDATE as the sort criterion. Note that this is not the same as ORDER BY 1 because :SORT is used as a value rather than to identify the position of an expression in the SELECT list. Note that DECODE is required in this example. You cannot use a bind variable in an ORDER BY clause unless it is with DECODE.

SELECT ORDID, SHIPDATE, ORDERDATE, TOTAL

FROM ORD
ORDER BY DECODE(:SORT, 1, SHIPDATE, 2, ORDERDATE);
Example 6:   CONNECT BY and START WITH clauses

References in CONNECT BY and START WITH clauses are used in the same way as they are in the WHERE and HAVING clauses.

Example 7:   PL/SQL
procedure double is begin; :my_param := :my_param*2; end;

The value of myparam is multiplied by two and assigned to myparam.

2.3.4.2 About lexical references

Lexical references are placeholders for text that you embed in a SELECT statement. You can use lexical references to replace the clauses appearing after SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, CONNECT BY, and START WITH. Use a lexical reference when you want the parameter to substitute multiple values at runtime.

You cannot make lexical references in a PL/SQL statement. You can, however, use a bind reference in PL/SQL to set the value of a parameter that is then referenced lexically in SQL. Look at the example below.

You create a lexical reference by typing an ampersand (&) followed immediately by the column or parameter name. A default definition is not provided for lexical references. Therefore, you must do the following:

Restrictions
  • A lexical reference cannot be used to create additional bind variables after the After Form trigger fires. For example, suppose you have a query like the following (note that the WHERE clause is replaced by a lexical reference):

    SELECT ENAME, SAL FROM EMP
    &where_clause
    
    

    If the value of the WHERE_CLAUSE parameter contains a reference to a bwind variable, you must specify the value in the After Form trigger or earlier. You would get an error if you supplied the following value for the parameter in the Before Report trigger:

    WHERE SAL = :new_bind
    

    If you supplied this same value in the After Form trigger, the report would run.

    Examples

    Example 1: SELECT clause
    SELECT &P_ENAME NAME, &P_EMPNO ENO, &P_JOB ROLE
    
    
    FROM EMP;
    
    

    P_ENAME, P_EMPNO, and P_JOB can be used to change the columns selected at runtime. For example, you could enter DEPTNO as the value for P_EMPNO on the Runtime Parameter Form. Note that in this case, you should use aliases for your columns. Otherwise, if you change the columns selected at runtime, the column names in the SELECT list will not match the Reports Builder columns and the report will not run.

    Example 2: FROM clause
    SELECT ORDID, TOTAL
    
    
    FROM &ATABLE;
    
    

    ATABLE can be used to change the table from which columns are selected at runtime. For example, you could enter ORD for ATABLE at runtime. If you dynamically change the table name in this way, you may also want to use lexical references for the SELECT clause (look at the previous example) in case the column names differ between tables.

    Example 3: WHERE clause
    SELECT ORDID, TOTAL
    
    
    FROM ORD
    WHERE &CUST;
    
    

    CUST can be used to restrict records retrieved from ORD. Any form of the WHERE clause can be specified at run-time.

    Example 4: GROUP BY clause
    SELECT NVL(COMMPLAN, DFLTCOMM) CPLAN, SUM(TOTAL) TOTAL
    
    
    FROM ORD
    GROUP BY &NEWCOMM;
    
    

    The value of NEWCOMM can be used to define the GROUP BY clause.

    Example 5: HAVING clause
    SELECT CUSTID, SUM(TOTAL) TOTAL
    
    
    FROM ORD
    GROUP BY CUSTID HAVING &MINTOTAL;
    
    

    The value of MINTOTAL could, for example, be used to select customers with a minimum total of orders.

    Example 6: ORDER BY clause
    SELECT ORDID, SHIPDATE, ORDERDATE, TOTAL
    
    
    FROM ORD
    ORDER BY &SORT;
    
    

    The value of SORT can be used to select SHIPDATE, ORDERDATE, ORDID, or any combination as the sort criterion. It could also be used to add on to the query, for example to add a CONNECT BY and START WITH clause.

    Example 7: CONNECT BY and START WITH clauses

    Parameters in CONNECT BY and START WITH clauses are used in the same way as they are in the WHERE and HAVING clauses.

    Example 8: Multiple clauses
    SELECT &COLSTABLE;
    
    

    COLSTABLE could be used to change both the SELECT and FROM clauses at runtime. For example, you could enter DNAME ENAME, LOC SAL FROM DEPT for COLSTABLE at runtime.

    SELECT * FROM EMP &WHEREORD;
    
    

    WHEREORD could be used to change both the WHERE and ORDER BY clauses at runtime. For example, you could enter WHERE SAL > 1000 ORDER BY DEPTNO for &WHEREORD at runtime.

    Example 9: PL/SQL and SQL 
    SELECT &BREAK_COL C1, MAX(SAL)
    
    
    FROM EMP
    GROUP BY &BREAK_COL;
    
    

    BREAK_COL is used to change both the SELECT list and the GROUP BY clause at runtime. The Initial Value of the parameter &BREAK_COL is JOB. At runtime, the user of the report can provide a value for a parameter called GROUP_BY_COLUMN (of Datatype Character).

    In the Validation Trigger for GROUP_BY_COLUMN, you call the following PL/SQL procedure and pass it the value of GROUP_BY_COLUMN:

    procedure conv_param (in_var IN char) is
    begin
    
    
    if upper(in_var) in ('DEPTNO','EMPNO','HIREDATE') then
    
    :break_col := 'to_char('||in_var||')' ;
    
    else
    
    :break_col := in_var;
    
    end if;
    
    end;

    This PL/SQL ensures that, if necessary, a TO_CHAR is placed around the break column the user chooses. Notice how in SQL, you make a lexical reference to BREAK_COL. In PL/SQL, you must make a bind reference to BREAK_COL because lexical references are not allowed in PL/SQL.

    2.3.4.3 Differences between bind and lexical references

    Bind references are used to replace a single value in SQL or PL/SQL. Specifically, bind references may be used to replace expressions in SELECT, WHERE, GROUP BY, ORDER BY, HAVING,CONNECT BY, and START WITH clauses of queries. Binds may not be referenced in the FROM clause. An example is:

    SELECT ORDID,TOTAL 
    
    
    FROM ORD
    WHERE CUSTID = :CUST
    
    

    Lexical references are placeholders for text that you embed in a SELECT statement, when you want the parameter to substitute multiple values at runtime. You can use lexical references to replace the clauses appearing after SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, CONNECT BY, and START WITH. You cannot make lexical references in PL/SQL. Before you reference a lexical parameter in a query you must have predefined the parameter and given it an initial value. An example is:

    SELECT ORDID, TOTAL
    
    
    FROM &ATABLE
    

    2.3.5 About non-linkable queries

    A non-linkable query is a detail query that contains column objects that prevent the query from being linked to via a column-to-column link (when you create a column-to-column link, Reports Builder adds a WHERE clause to your query). If you attempt to create such a link, a message dialog box displays, which prompts you to choose whether to create a group-to-group query (using the parent groups), or to cancel the operation. A non-linkable query displays the non-linkable query icon in its title bar.

    Instead, you can create a group-to-group link (when you create a group-to-group link, Reports Builder does not add a WHERE clause to your query) between the two queries and add a WHERE clause to the child query's SELECT statement, using a bind variable to reference the parent column. See Section 3.8.6, "Creating a data link".

    For example, suppose you want to create a column-to-column link between the ADDRESS.STREET column in your child query and the LOC1 column in your parent query. You can create a group-to-group link, and then modify the child query SQL statement to say:

    SELECT * FROM EMP E WHERE E.ADDRESS.STREET = :LOC1
    
    See also

    Section 1.7.4, "About data links"

    Section 1.7.1, "About queries"

    Section 2.3.4.1, "About bind references"

    2.3.6 About links versus groups

    In Reports Builder, data is defined independent of format (layout). Therefore, you should be aware of when to use data links instead of groups.

    The layouts of a master/detail report that uses two queries and a data link, and a group report that uses one query and two groups can be identical. Following is an example of a default master/detail report and a group report that query the same data. Notice the difference between the two reports: unlike the group report, the master/detail report displays department 40. This is because the data link in the master/detail report causes an outer-join: the link automatically fetches unrelated data. If you are designing a group report that requires an outer-join, explicitly add it to your SELECT statement via (+).

    Figure 2-3 Default master/detail and group report that query same data

    Text description of a_links_vs_breaks1.gif follows.

    Text description of the illustration a_links_vs_breaks1.gif

    A master/detail/detail report, as shown in the figure below, is a report that contains three groups of data: for each master group, two unrelated detail groups are displayed. To produce a master/detail/detail report or any variation of it, you must use data links. If you try to produce this report with a control break using a single query and three groups the query will establish a relationship between the two detail groups.

    Figure 2-4 Master/detail/detail report

    Text description of a_links_vs_breaks2.gif follows.

    Text description of the illustration a_links_vs_breaks2.gif

    See also

    Section 1.7.2, "About groups"

    Section 1.7.4, "About data links"

    2.3.7 About matrix objects

    A matrix object merely defines a relationship between two repeating frames: it isn't really owned by anything, nor does it own anything. A matrix object is created only for layouts with a Matrix layout style. A report may have multiple matrices within it, provided that the data model contains the necessary groups. Reports Builder creates one matrix object for each pair of intersecting, perpendicular repeating frames.

    The repeating frames are the dimensions of the matrix and the matrix object contains the field that will hold the "filler" or values of the cell group. One of the repeating frames must have the Print Direction property set to Down and the other must have the Print Direction property set to Across in order to form a matrix.

    Restrictions

    Example

    Suppose that you have a group named Group1 that contains a column called C_DEPTNO, which gets its values from the database column DEPTNO. A group called Group2, contains column C_JOB, which gets its values from the database column JOB, and column C_DEPTNO1, which is used for linking to Group1's query. A group called Group3 contains a column called SUMSAL, which is a summary of the database column SAL.

                        Job 
              Analyst  Clerk  Manager 
    
          10           $1300   $2450 
    Dept  20    $6000  $1900   $2975 
          30           $ 950   $2850 
    
    

    In this example:

    If you need to build a more complex matrix, you can do so by adding more columns to Group1 and Group2. For example, instead of having Group1 just contain department numbers, it could also contain the locations (LOC) of the departments. The matrix might then look something like this:

                                  Job
     Loc        Dept    Analyst  Clerk  Manager
     
     New York    10              $1300   $2450
     Dallas      20      $6000   $1900   $2975
     Chicago     30              $ 950   $2850
    
    See also

    Section 1.3.7, "About matrix reports"

    Section 2.1.7, "About nested matrix reports"

    Section 2.1.8, "About matrix with group reports"

    Section 3.9.1.3, "Creating a matrix object"

    Section 3.8.5, "Creating a matrix (cross-product) group"

    Section 3.5.3, "Creating a nested matrix report"

    2.4 Layout Objects

    The topics in this section build on the basic concepts discussed in Section 1.8, "Layout Objects".

    2.4.1 About layout objects

    Several important concepts and properties apply to layout objects:

    See also

    Section 3.5.4, "Creating a default layout for a report"

    Section 3.10.2, "Creating a default layout for a section"

    Section 2.6.12.2, "About format triggers"

    The Properties section of the Reports Builder online help

    2.4.2 About layout defaulting

    When you select one of the default layout styles in the Report Wizard, Reports Builder creates the necessary layout objects, based upon the report's data model. For example, if you want to build a mailing label report and have defined an appropriate data model, simply choose the mailing label default style. Reports Builder automatically creates the report's layout objects and displays them in the Layout Model view. You can completely customize any default layout you create. You can cut, copy, paste, move, resize, and edit each layout object that Reports Builder generates for you.

    Layout defaulting is governed by the following rules:

    Reports Builder defaults report layout according to the following rules:

    1. Unless otherwise noted, a group with a Print Direction of Across defaults identically to a group with a Print Direction of Down, except that the default format is transposed. To quickly determine the defaulting of an Across group, do the following:

      • Draw the down layout for the group on translucent paper.

      • Turn the page over as if it was a page in a book.

      • Rotate the page counter-clockwise 90 degrees.

    2. In form letter reports, all default fields are hidden, and have a Horizontal Elasticity property setting of Variable and a Vertical Elasticity property setting of Fixed. In all other reports, all default fields have a Horizontal and Vertical Elasticity property setting of Fixed.

      Exception: For tabular, form-like, group left/above, and matrix reports, the default for CHAR (if you reduce the default width) and LONG fields have a Horizontal Elasticity property setting of Fixed and a Vertical Elasticity property setting of Variable. As a result, all of the field's value will be displayed, instead of truncated, by word-wrapping any data to the next lines.


      Caution:

      For form letter and mailing label reports, the default for CHAR (if you reduce the default width) and LONG fields have a Horizontal Elasticity and Vertical Elasticity property setting of Fixed. As a result, the field value will be truncated if the size of the data is greater than the size of the field.


    3. Summaries that are owned by the report, not by a group, are allowed in all report layout styles. They are all formatted in the following way:

      • If the layout style is form-like, form letter, or mailing label, the summary is a report column. A report column is formatted like any other database column for that report style.

      • If the layout style is tabular, group left/above, or matrix, and the column on which the summary performs its function is not selected, the summary is a report column. (It is formatted as stated in the bullet above.) Otherwise, the summary is a report summary. It is formatted left-justified at the end of the report, with the label to the left of the field (if there is room).

    4. If the layout style is tabular, group left/above, or matrix, a summary is defaulted like a database column if the column it summarizes is not selected. Otherwise, a summary is defaulted like summaries (i.e., appearing inside the M_groupname_FTR frames).

    5. If the layout style is tabular, group left/above, or matrix, Reports Builder places one summary type per line, in the following order:

      • SUM

      • AVERAGE

      • MINIMUM

      • MAXIMUM

      • COUNT

      • FIRST

      • LAST

      • % OF TOTAL

      • STANDARD DEVIATION

      • VARIANCE

    6. If the layout style is tabular, group left/above, or matrix, the summary label will appear to the far-left of the group footer frame (M_groupname_FTR). If there is not room for the full label, the label will be truncated.

    See also

    Section 3.5.4, "Creating a default layout for a report"

    Section 3.10.2, "Creating a default layout for a section"

    2.4.3 About images

    You can add an image to a report by:

    By default, images display in fields so that they appear in the printed report, not only in the Previewer.

    Oracle Reports 10g (9.0.4) enhances imaging support via the REPORTS_OUTPUTIMAGEFORMAT environment variable and OUTPUTIMAGEFORMAT command line keyword. The image formats supported in the report definition are: JPEG (all types), PNG, BMP, TIFF, GIF, CGM, and OGD. The enhancements in imaging support provide the capability to generate complex graphics-intensive reports with high fidelity image output. Additionally on UNIX, the dependency on a windowing system for displaying images is removed; the PostScript printer driver screenprinter.ppd provides surface resolution for images.

    You can include an unlimited number of image objects without running out of local disk space by using non-caching references. A non-caching reference causes objects to be read from the database only when needed while a report is processing. You must be connected to an ORACLE V7.1 or later database to use this feature.

    If you reference a URL for an image, the image is displayed when you format your report for HTML output. For other output formats, the URL text displays in the Paper Design view; in the output destination (for example, a file or PDF document), nothing is displayed. It is your responsibility to verify that the URL exists; Reports Builder does not validate the existence of the resource nor the syntax of the protocol. The size of the object that contains the URL defines the size of the image in the HTML output. Any elasticity properties applied to the object are ignored.

    Limitations
    See also

    Section 3.9.8.6, "Importing a drawing or image"

    Section 3.9.8.7, "Selecting an image from the database"

    Section 3.9.8.8, "Selecting an image URL from the database"

    Section 3.9.8.9, "Linking an image object to a file"

    Section 3.9.8.10, "Linking an image object to a URL"

    2.4.4 About anchors

    Anchors fasten an edge of one object to an edge of another object, ensuring that they maintain their relative positions. For example, you can anchor boilerplate text to the edge of a variable-sized repeating frame, guaranteeing the boilerplate's distance and position in relation to the repeating frame, no matter how the frame's size might change.

    Anchors determine the vertical and horizontal positioning of a child object relative to its parent. The child object may be either outside of or contained within the parent.

    Since the size of some layout objects may change when the report runs (and data is actually fetched), you need anchors to define where you want objects to appear relative to one another. An anchor defines the relative position of an object to the object to which it is anchored. Positioning is based on the size of the objects after the data has been fetched rather than on their size in the editor. It should also be noted that the position of the object in the Paper Layout view affects the final position in the report output. Any physical offset in the layout is incorporated into the percentage position specified in the Anchor properties.

    There are two types of anchors:

    Relative positioning of anchors

    When you anchor a child object to a parent object, the x and y coordinates of the anchor's attachments are important.

    If the parent object is located above or below the child object:

    Figure 2-5 Parent object above child object

    Text description of a_anchors_rp.gif follows.

    Text description of the illustration a_anchors_rp.gif

    If the parent object is located to the right or left of the child object:

    Figure 2-6 Parent object to the right of child object

    Text description of a_anchors_rp2.gif follows.

    Text description of the illustration a_anchors_rp2.gif

    If you need to position an object outside a repeating frame or frame, but you want the object to be "owned" by the repeating frame or frame (i.e., to be formatted when its "owner" is formatted), create an anchor that is attached to an object inside the frame or repeating frame.

    Collapsing Anchors

    You can create anchors to be "collapsible." Collapsing anchors help avoid unnecessary empty space in your report. Such empty space can occur when the parent object does not print on the same page as the child object, either because the parent and child can not fit on the same page or because of an assigned Print Condition. A collapsing anchor allows the child object to move into the position that would have been taken by the parent had it printed. The child object will also maintain its relative position as defined by the anchor.

    2.4.4.1 Implicit anchoring algorithm

    Reports Builder creates implicit anchors at runtime in the body region. The margin algorithm differs slightly.

    Body algorithm

    1. Determine which objects are not entirely enclosed by a repeating frame of frame (directly or indirectly), or explicitly anchored to an object that is enclosed by a frame or repeating frame (directly or indirectly). We'll call these objects Type A objects. (Type A objects are typically group frames, repeating frames, other objects you create that are not owned by a frame or repeating frame, etc.) An object is considered to be enclosed by another object only if all of the following are true:

      • Both objects belong to the same region (Body or Margin).

      • The outermost of the two objects is a frame or repeating frame.

      • The outermost of the two objects is behind the other object.

      • The innermost of the two objects lies entirely within the borders of the other object.

    2. Determine all children objects of a frame or repeating frame (these are the non-Type A objects). We'll call these objects Type B objects.

    3. Follow this procedure for Type A and Type B objects independently:

      • Find all objects that are of the same type (e.g., Type A), and are on the same layer.

      • Determine which of those objects have potential to "push" other objects of that type. An object has potential to "push" object of that type if it has a Horizontal and/or Vertical Elasticity setting of Variable or Expand, and a second object is located in its "push path" (i.e., in the area in which it can possibly grow). Also, a repeating frame with a Horizontal and/or Vertical Elasticity setting of Fixed or Contract has a "push path": its Print Direction.

      • Create pairs of objects. Each pair must contain a pusher (i.e., the object that will grow) and a pushee (i.e., the object that will be pushed). When creating these pairs, a pushee object cannot be a child of an explicit anchor--those objects are ignored.

      • Go through this loop. For each pair, determine the distance in the "push path" between the pusher and pushee. Next, find the pair with the shortest distance. Finally, create an implicit anchor between those two objects using this algorithm:

        If the "push path" direction is Down, anchor the pushee object's top 0% to the pusher object's bottom 0%.

        If the "push path" direction is Across, anchor the pushee object's left 0% to the pushed object's right 0%.

      • That pair is now treated like one object, and the loop continues until either all objects have one anchor, or nothing will push the remaining, unanchored objects.

      • For each remaining, unanchored object, create an implicit anchor from the top-left corner of the object to the top-left corner of the body region.

      • Move to the next layer, and follow the procedure starting at step 1.

    Rules:

    Figure 2-7 Object in push path of two other objects

    Text description of ch2ru636.gif follows.

    Text description of the illustration ch2ru636.gif

    In the first case, M_Sums is in the "push path" of both B_Text1 and R_Ename. Because M_Sums is equidistant from B_Text1 and R_Ename, though, the normal criteria (shortest distance) for determining implicit anchors does not work in this case. Consequently, the formatting algorithm will randomly create an implicit anchor between M_Sums and either B_Text1 or R_Ename at runtime. To avoid this behavior, you could create an explicit anchor between M_Sums and B_Text1 or R_Ename.

    In the second case, B_Text3 is in the "push path" of M_Emp. Since the bottom edges of M_Emp and R_Mgr are virtually in the same position, though, B_Text3 could be implicitly anchored to either M_Emp or R_Mgr. Consequently, the formatting algorithm will randomly create an implicit anchor between B_Text3 and either M_Emp or R_Mgr at runtime. To avoid this behavior, you could create an explicit anchor from B_Text3 to one of the objects or remove the explicit anchor between R_Ename and B_Text2. Removing the explicit anchor would cause R_Mgr to be treated as a descendant of M_Emp and, therefore, the implicit anchor would always be created between B_Text3 and M_Emp.

    (Note that Case 2 is most likely to occur in character mode, where it is common to have the edges of objects overlap in the Paper Layout view.)

    Margin algorithm

    Reports Builder creates implicit anchors for all Type B objects in the margin region using the Body algorithm. For each Type A object, however, Reports Builder creates an implicit anchor from the top-left corner of the object to the top-left corner of the margin. No Type A object will be implicitly anchored to another Type A object. (This ensures that Type A objects will not be pushed off the page. However, they may be overwritten by another Type A object, if they are found on the same layer.)

    See also

    Section 3.9.5.1, "Anchoring objects together"

    Section 3.9.5.2, "Viewing implicit anchors"

    Section 3.9.5.3, "Moving an anchor"

    2.4.5 About changing colors and patterns

    Color and pattern selections are applied to an entire object (e.g., you can apply a color to all the text in the object but not to a segment of the text).

    You can change colors and patterns in your report in the following ways:

    Additionally, you can set color palette preferences to specify how it is used by a report (see Section 3.2.6, "Setting color palette preferences") and modify the color palette to change the definition of individual colors (see Section 3.9.6.5, "Modifying the color palette").

    To change the color palette being used by the current report, you can import a new color palette. You can also export the current color palette for use by other reports. (See Section 3.9.6.6, "Importing or exporting a color palette".)

    See also

    Section 3.9.6.2, "Changing colors"

    Section 3.9.6.3, "Changing patterns"

    Section 3.9.6.4, "Changing colors and patterns using PL/SQL"

    Section 3.9.4.2, "Changing object border attributes"

    Topics "Oracle CDE1 color palette", "Default color palette", "Grayscale color palette", and "Pattern color palette" in the Reference > Color and Pattern Palettes section of the Reports Builder online help

    Topic "SRW built-in package" in the Reference > PL/SQL Reference > Built-in Packages section of the Reports Builder online help

    Topic "Template properties" in the Properties section of the Reports Builder online help

    2.4.6 About resizing objects

    You can resize queries, groups, frames, repeating frames, fields, matrix objects, and boilerplate objects. You cannot resize anchors. However, an anchor is automatically resized if you move one of the objects it anchors.


    Caution:

    When you resize boilerplate text, be very careful that all of the text fits within the object. If font descends (the space left for the lower parts of letters like g and q) do not fit, the line of text will appear in the Report Editor view, but, when the report is run, the line will not appear in the output. When you click a handle and drag it, the two edges that join at the corner will be resized; that is, the object will grow or reduce in both the x and y directions.


    See also

    Section 3.9.12.1, "Resizing objects"

    Section 3.9.12.2, "Making multiple objects the same size"

    Section 3.9.11.3, "Adjusting parent borders automatically"

    2.4.7 About moving and layering objects in the Paper Layout view

    In the Paper Layout view, objects must be on a layer above the objects that enclose them. For example, the fields that belong to a repeating frame must be at least one layer above the repeating frame in the Paper Layout view. If not, then they are not considered to be enclosed by the repeating frame any longer and will cause a frequency error at runtime. When you move or group objects in the Paper Layout view, it is possible to change the layering such that you will get frequency errors when you run the report. To avoid this problem, you should take advantage of Confine or Flex mode when moving objects in the Paper Layout view.

    See also

    Section 3.9.4.3, "Changing the current mode (Confine or Flex)"

    Section 3.9.11.7, "Changing object layering"

    Section 3.9.11.2, "Moving an object outside its parent"

    Section 3.9.11.1, "Moving multiple objects"

    Section 3.9.11.6, "Aligning objects"

    2.5 Parameter Form Objects

    The topic in this section builds on the basic concepts discussed in Section 1.9, "Parameter Form Objects".

    2.5.1 About Parameter Form HTML extensions

    Parameter Form HTML extensions enable you to enhance your Runtime Parameter Form with HTML tagged text and JavaScript when your paper reports are run via the Web. To enhance your Paper Parameter Form for displaying on the Web, you can:

    You can access the Parameter Form Builder from the Object Navigator or by choosing Tools > Parameter Form Builder.

    See also

    Section 1.2.2, "About Web reports"

    Section 1.9.4, "About Parameter Forms for Web reports"

    Section 2.2.3, "About Web links for HTML output"

    2.6 PL/SQL

    The topics in this section discuss the use of PL/SQL in Reports Builder.

    2.6.1 About the PL/SQL Editor

    The PL/SQL Editor enables you to create and edit PL/SQL program units.

    Usage notes

    When you make changes to a program unit, dependent program units lose their compiled status, which is indicated by an asterisk (*) after their name under the Program Units node in the Object Navigator. You can navigate to those program units directly in the PL/SQL Editor using the Name drop-down list to recompile them.

    Restrictions
    See also

    Section 3.13.3.1, "Creating a local program unit"

    2.6.2 About the Stored PL/SQL Editor

    The Stored PL/SQL Editor enables you to create and edit stored PL/SQL program units in a database (listed under the Database Objects node in the Object Navigator).

    See also

    Section 3.13.3.2, "Creating a stored program unit"

    2.6.3 About the Syntax Palette

    The Syntax Palette is a programming tool that enables you to display and copy the constructs of PL/SQL language elements and built-in packages into the PL/SQL Editor and Stored PL/SQL Editor.

    See also

    Section 3.13.2.4, "Inserting syntax into the PL/SQL Editor"

    2.6.4 About program units

    Program units are packages, functions, or procedures that you can reference from any PL/SQL within the current report.


    Note:

    Program units cannot be referenced from other documents. If you want to create a package, function, or procedure that can be referenced from multiple documents, create an external PL/SQL library (see Section 3.13.5.1, "Creating an external PL/SQL library").


    For a detailed example of using PL/SQL in a report, see Chapter 37, "Building a PL/SQL Report".

    Restrictions

    Example: Referencing a PL/SQL function in formulas

    Suppose that you have a report with the following groups and columns:

    Groups    Columns         Summary 
    -----------------------------------------
    RGN       REGION
              RGNSUMSAL       SUM(DEPTSUMSAL)
              COSTOFLIVING
    		   
    DEPT      DNAME
              DEPTNO
              DEPTSUMSAL      SUM(EMP.SAL)
    		   
    JOB       JOB
              HEADCOUNT       COUNT(EMP.EMPNO)
    		   
    EMP       ENAME
              EMPNO
              SAL
              COMM
    

    Given these groups and columns, you might create multiple formulas that apply the cost of living factor (COSTOFLIVING) to salaries. To avoid duplication of effort, you could create the following PL/SQL function and reference it from the formulas:

    function CompSal(salary number) return number is
    begin
      return (salary*CostofLiving);
    end;
    
    Following are some examples of how you might reference the PL/SQL function in 
    formulas:
    
    CompSal(:RGNSUMSAL)
    
    or
    
    CompSal(:SAL) + COMM
    
    See also

    Section 3.13.3.1, "Creating a local program unit"

    2.6.5 About stored program units

    Stored program units (also known as stored subprograms, or stored procedures) can be compiled separately and stored permanently in an Oracle database, ready to be executed. Once compiled and stored in the data dictionary, they are schema objects, which can be referenced by any number of applications connected to that database.

    Stored program units offer higher productivity, better performance, memory savings, application integrity, and tighter security. For example, by designing applications around a library of stored procedures and functions, you can avoid redundant coding and increase your productivity.

    Stored program units are stored in parsed, compiled form. So, when called, they are loaded and passed to the PL/SQL engine immediately. Also, they take advantage of shared memory. So, only one copy of a program unit need be loaded into memory for execution by multiple users.

    Because stored program units run in ORACLE, they can perform database operations more quickly than PL/SQL that is local to your report. Therefore, in general, use stored program units for PL/SQL that performs database operations. Use local program units for PL/SQL that does not involve database operations. However, if you are on a heavily loaded network with very slow response time, using stored program units may not be faster for database operations. Similarly, if your server is significantly faster than your local machine, then using local program units may not be faster for non-database operations.w

    See also

    Section 3.13.3.2, "Creating a stored program unit"

    2.6.6 About external PL/SQL libraries

    External PL/SQL libraries are collections of PL/SQL procedures, functions, and packages that are independent of a report definition. By attaching an external library to a report, you can reference its contents any number of times. For example, you could reference a procedure in an attached library from both a Before Report trigger and a format trigger. This eliminates the need to re-enter the same PL/SQL for each application.

    When you associate an external PL/SQL library with a report or another external library, it is called an attached library.

    See also

    Section 3.13.5.1, "Creating an external PL/SQL library"

    2.6.7 About attached libraries

    Attached libraries are external PL/SQL libraries that you have associated with a report or another external library. When an external library is attached, you can reference its packages, functions, and procedures from within your report. For example, if you attached an external library name MYLIB to your report and it contained a function named ADDXY, then you could reference ADDXY from any PL/SQL in the report.

    External PL/SQL libraries are independent of a report definition

    Usage notes

    Local PL/SQL executes more quickly than a reference to a procedure or function in an external PL/SQL library. As a result, you should only use external PL/SQL libraries when the benefits of sharing the code across many applications outweigh the performance overhead.

    Restrictions
    See also

    Section 3.13.5.5, "Attaching a PL/SQL library"

    2.6.8 About formulas

    Formulas are PL/SQL functions that populate formula or placeholder columns. You can access the PL/SQL for formulas from the Object Navigator, the PL/SQL Editor, or the Property Inspector (i.e., the PL/SQL Formula property).

    A column of datatype Number can only have a formula that returns a value of datatype NUMBER. A column of Datatype Date can only have a formula that returns a value of datatype DATE. A column of Datatype Character can only have a formula that returns a value of datatype CHARACTER, VARCHAR, or VARCHAR2.

    Restrictions

    Examples

    Example 1: Adding values

    The following example populates the column with the value of the salary plus the commission.

    function salcomm return NUMBER is
    begin
      return(:sal + :comm);
    end;
    
    Example 2: Using conditions

    The following code adds the commission to the salary if the value for the commission is not null.

    function calcomm return NUMBER is
    temp number;
    begin
      if :comm IS NOT NULL then
        temp := :sal + :comm;
      else
        temp := :sal;
      end if;
      return (temp);
    end;
    
    See also

    Section 2.3.2, "About formula columns"

    Section 3.13.4.3, "Creating or editing a formula column"

    Section 3.13.4.4, "Creating a placeholder column"

    2.6.9 About group filters

    A group filter determines which records to include in a group. You can use the packaged filters, First and Last, to display the first n or last n records for the group, or you can create your own filters using PL/SQL. You can access group filters from the Object Navigator, the Property Inspector (the PL/SQL Filter property), or the PL/SQL Editor.

    The function must return a boolean value (TRUE or FALSE). Depending on whether the function returns TRUE or FALSE, the current record is included or excluded from the report.

    Difference between group filters and Maximum Rows to Fetch property

    The Maximum Rows to Fetch property restricts the actual number of records fetched by the query. A group filter determines which records to include or exclude, after all the records have been fetched by the query. Since Maximum Rows to Fetch actually restricts the amount of data retrieved, it is faster than a group filter in most cases. If you use a Filter of Last or Conditional, Reports Builder must retrieve all of the records in the group before applying the filter. Also, you should be aware that when using Maximum Rows to Fetch for queries. It can effect summaries in other groups which depend on this query. For example, if you set Maximum Rows to Fetch to 8 any summaries based on that query will only use the 8 records retrieved.

    Restrictions

    Group filters cannot be added to groups if Filter Type is First or Last.

    Example

    function filter_comm return boolean is
    begin
      if :comm IS NOT NULL then
        if :comm < 100 then
          return (FALSE);
        else
          return (TRUE);
        end if;
      else
        return (FALSE); -- for rows with NULL commissions
      end if;
    end;
    
    See also

    Section 3.13.4.2, "Creating or editing a group filter"

    2.6.10 About ref cursor queries

    A ref cursor query uses PL/SQL to fetch data. Each ref cursor query is associated with a PL/SQL function that returns a cursor value from a cursor variable. The function must ensure that the ref cursor is opened and associated with a SELECT statement that has a SELECT list that matches the type of the ref cursor.

    Usage notes

    Furthermore, if you use a stored program unit to implement ref cursors, you receive the added benefits that go along with storing your program units in the Oracle database.

    For more information about ref cursors and stored subprograms, refer to the PL/SQL User's Guide and Reference.

    Examples

    Example 1: Package with ref cursor example
    /* This package spec defines a ref cursor
    ** type that could be referenced from a
    ** ref cursor query function.
    ** If creating this spec as a stored
    ** procedure in a tool such as SQL*Plus,
    ** you would need to use the CREATE
    ** PACKAGE command.
    */
     
    PACKAGE cv IS
    type comp_rec is RECORD 
      (deptno number,
       ename varchar(10),
       compensation number);
    type comp_cv is REF CURSOR return comp_rec;
    END;
    
    Example 2: Package with ref cursor and function
    /* This package spec and body define a ref
    ** cursor type as well as a function that
    ** uses the ref cursor to return data.
    ** The function could be referenced from
    ** the ref cursor query, which would
    ** greatly simplify the PL/SQL in the
    ** query itself. If creating this spec
    ** and body as a stored procedure in a
    ** tool such as SQL*Plus, you would need
    ** to use the CREATE PACKAGE and CREATE
    ** PACKAGE BODY commands.
    */
     
    PACKAGE cv IS
    type comp_rec is RECORD
      (deptno number,
       ename varchar(10),
       compensation number);
    type comp_cv is REF CURSOR return comp_rec;
    function emprefc(deptno1 number) return comp_cv;
    END;
     
    PACKAGE BODY cv IS
    function emprefc(deptno1 number) return comp_cv is
      temp_cv cv.comp_cv;
    begin
      if deptno1 > 20 then
        open temp_cv for select deptno, ename,
        1.25*(sal+nvl(comm,0)) compensation
        from emp where deptno = deptno1;
      else
        open temp_cv for select deptno, ename,
        1.15*(sal+nvl(comm,0)) compensation
        from emp where deptno = deptno1; 
      end if;
      return temp_cv;
    end;
    END;
    
    Example 3: Ref cursor
    empCur rcPackage.empCurType; 
    BEGIN
      OPEN empCur FOR SELECT * FROM emp;
      RETURN empCur;
    END; 
     
    /* Note, rcPackage is a local program unit defined as: */
     
    PACKAGE rcPackage IS
      TYPE empCurType IS REF CURSOR RETURN emp%ROWTYPE;
    END;
    
    Example 4: Ref cursor query
    /* This ref cursor query function would be coded
    ** in the query itself. It uses the cv.comp_cv
    ** ref cursor from the cv package to return
    ** data for the query.
    */
    function DS_3RefCurDS return cv.comp_cv is
      temp_cv cv.comp_cv;
    begin
      if :deptno > 20 then
        open temp_cv for select deptno, ename,
        1.25*(sal+nvl(comm,0)) compensation
        from emp where deptno = :deptno;
      else
       open temp_cv for select deptno, ename,
       1.15*(sal+nvl(comm,0)) compensation
       from emp where deptno = :deptno;
      end if;
      return temp_cv;
    end;
    
    Example 5: Ref cursor query calling function
    /* This ref cursor query function would be coded
    ** in the query itself. It uses the cv.comp_cv
    ** ref cursor and the cv.emprefc function from
    ** the cv package to return data for the query.
    ** Because it uses the function from the cv
    ** package, the logic for the query resides
    ** mainly within the package. Query
    ** administration/maintenance can be
    ** done at the package level (e.g.,
    ** modifying SELECT clauses could be done
    ** by updating the package). You could also
    ** easily move the package to the database.
    ** Note this example assumes you have defined
    ** a user parameter named deptno.
    */
    
    function DS_3RefCurDS return cv.comp_cv is
      temp_cv cv.comp_cv;
    begin
      temp_cv := cv.emprefc(:deptno);
      return temp_cv;
    end;
    
    See also

    Section 3.8.1.9, "Creating a query: Ref Cursor Query tool"

    2.6.11 About built-in packages

    A built-in package is a group of logically related PL/SQL types, objects, and functions or procedures. It generally consists of two parts: the package spec (including data declarations) and the package body. Packages are especially useful because they allow you to create global variables.

    Oracle provides several packaged procedures that you can use when building or debugging your PL/SQL-based applications. Your PL/SQL code can make use of the procedures, functions, and exceptions in the Reports Builder built-in package (SRW), and numerous Tools built-in packages, as described below.

    2.6.11.1 About the Reports Builder built-in package (SRW)

    Reports Builder is shipped with a built-in package (SRW), a collection of PL/SQL constructs that include many functions, procedures, and exceptions you can reference in any of your libraries or reports.

    The PL/SQL provided by the SRW package enables you to perform such actions as change the formatting of fields, run reports from within other reports, create customized messages to display in the event of report error, and execute SQL statements.

    You can reference the contents of the SRW package from any of your libraries or reports without having to attach it. However, you cannot reference its contents from within another product, e.g., from SQL*Plus.

    Constructs found in a package are commonly referred to as "packaged"; i.e., packaged functions, packaged procedures, and packaged exceptions.

    See also

    Topic "SRW built-in package" in the Reference section of the Reports Builder online help

    2.6.11.2 About the Tools built-in packages

    Several client-side built-in packages are provided that contain many PL/SQL constructs you can reference while building applications or debugging your application code. These built-in packages are not installed as extensions to the package STANDARD. As a result, any time you reference a construct in one of the packages, you must prefix it with the package name (e.g., TEXT_IO.PUT_LINE).

    The Tools built-in packages are:

    The following packages are used only internally by Oracle Reports. There are no subprograms available for external use with these packages.

    See also

    Topics for each of the Tools built-in packages under in the Reference > PL/SQL Reference > Built-in Packages section of the Reports Builder online help

    2.6.12 About triggers

    Triggers check for an event. When the event occurs they run the PL/SQL code associated with the trigger.

    Report triggers are activated in response to report events such as the report opening and closing rather that the data that is contained in the report. They are activated in a predefined order for all reports.

    Format triggers are executed before an object is formatted. A format trigger can be used to dynamically change the formatting attributes of the object.

    Validation triggers are PL/SQL functions that are executed when parameter values are specified on the command line and when you accept the Runtime Parameter Form.

    Database triggers are procedures that are stored in the database and implicitly executed when a triggering statement such as INSERT, UPDATE, or DELETE is issued against the associated table.

    2.6.12.1 About report triggers

    Report triggers execute PL/SQL functions at specific times during the execution and formatting of your report. Using the conditional processing capabilities of PL/SQL for these triggers, you can do things such as customize the formatting of your report, perform initialization tasks, and access the database. To create or modify a report trigger, use Report Triggers in the Object Navigator. Report triggers must explicitly return TRUE or FALSE. Reports Builder has five global report triggers (you cannot create new global report triggers):

    For information about these triggers, see the Reference section of the Reports Builder online help.

    Usage notes

    The Before Report trigger fires before the report is executed but after the queries are parsed.

    You can think of order in this way:

    1. Queries are parsed.

    2. Before Report trigger fires.

    3. Report is executed (i.e., fetch data+format output.)

    Consistency is guaranteed if you use DML, DDL in (or before) the After Form Trigger. However, consistency is not guaranteed in the Before Report trigger, since Reports Builder may have to start work on data cursors before that trigger based on the definition of the report. Before the Before Report trigger, Reports Builder describes the tables involved and opens cursors. Any change to the tables after that will not be seen by the report.

    See also

    Section 3.13.3.5, "Creating a report trigger"

    Section 3.13.3.6, "Deleting a report trigger"

    2.6.12.2 About format triggers

    A format trigger is a PL/SQL function executed before an object is formatted. A trigger can be used to dynamically change the formatting attributes of the object. For example, you can use a format trigger to cause a value to display in bold if it is less than zero. Another example is to use a format trigger to use scientific notation for a field if its value is greater than 1,000,000.

    A format trigger can fire multiple times for a given object, whenever Reports Builder attempts to format the object. Consider the case where Reports Builder starts to format the object at the bottom of a page. If the object does not fit on the page, Reports Builder stops formatting and reformats on the following page. In this case, the format trigger will fire twice. It is therefore not advisable to do any kind of "persistence" operation, such as logging, in this trigger.

    The Reports Builder SRW built-in package contains PL/SQL procedures with which you can quickly change the format attributes of an object. These include procedures to:

    Examples

    See the topic "Format trigger" in the Reference section of the Reports Builder online help.

    See also

    Section 3.13.4.1, "Creating or editing a format trigger"

    2.6.12.3 About validation triggers

    Validation triggers are PL/SQL functions that are executed when parameter values are specified on the command line and when you accept the Runtime Parameter Form.


    Note:

    For JSP-based Web reports, the Runtime Parameter Form displays when you run a report in Reports Builder, but does not display in the runtime environment. If parameters are not specified on the Runtime Parameter Form, the validation trigger returns false and generates error message rep-546 Invalid Parameter Input error. Thus, you need to provide the parameters in an alternate way, as described in Section 1.9.4, "About Parameter Forms for Web reports".


    Validation triggers are also used to validate the Initial Value property of the parameter. Depending on whether the function returns TRUE or FALSE, the user is returned to the Runtime Parameter Form.

    Example

    See the topic "Validation trigger" in the Reference section of the Reports Builder online help.

    See also

    Section 3.11.4, "Validating a parameter value at runtime"

    2.6.12.4 About database triggers

    Database triggers are procedures that are stored in the database and implicitly executed when a triggering statement such as INSERT, UPDATE, or DELETE is issued against the associated table. Triggers can be defined only on tables, not on views. However, triggers on the base table of a view are fired if an INSERT, UPDATE, or DELETE statement is issued against a view.

    A trigger can include SQL and PL/SQL statements that execute as a unit, and can invoke other stored procedures. Use triggers only when necessary. Excessive use of triggers can result in cascading or recursive triggers. For example, when a trigger is fired, a SQL statement in the trigger body potentially can fire other triggers.

    By using database triggers, you can enforce complex business rules and ensure that all applications behave in a uniform manner. Use the following guidelines when creating triggers:

    For additional information about how triggers are used in applications, see the Oracle9i Application Developer's Guide. See the Oracle9i Concepts Manual for more information about the different types of triggers.

    See also

    Section 3.13.3.7, "Creating a database trigger"

    2.7 Templates

    The topics in this section discuss the use of templates in Reports Builder.

    2.7.1 About templates

    Templates define common characteristics and objects that you want to apply to multiple paper-based reports. For example, you can define a template that includes the company logo and sets fonts and colors for selected areas of a report.

    When you use the Report Wizard to create a paper-based report, you use the Templates page of the wizard to apply a template (.tdf file) to the report. The Templates page lists the default templates, as well as any templates that you have created.


    Note:

    If the list of templates does not appear, make sure that the REPORTS_PATH environment variable includes the location of the templates (e.g., ORACLE_HOME\reports\templates).


    When you choose a template, objects in the margin area of a template are imported into the same locations in the current report section, overwriting any existing objects. The characteristics (formatting, fonts, colors, etc.) of objects in the body area of the template are applied to objects in the body area of the current report section. Any template properties, parameters, report triggers, program units, and attached libraries you have defined are also applied. You can apply different templates to each section of the report. However, if you are applying one of the default templates, you cannot combine two report blocks that use different default templates in a single report. All of your report blocks in any one report must use the same default template.

    If you later apply another template to a report, the existing template objects will be deleted in the current report section.

    See also

    Section 3.12, "Define a Template"

    2.7.2 About template attributes

    In the Layout Body area of a template, you can define Default and Override attributes under the following Object Navigator nodes:

    Default attributes

    The Default node in the Object Navigator defines the default visual attributes (formatting, fonts, colors, etc.) for all report styles. If you want to define attributes for individual report styles, you do so under the Override node. When you apply a template to a report, all Default attributes are applied to the report, except for attributes that are localized under the Override node.

    Override attributes

    Under the Override node in the Object Navigator, you can define attributes for individual report styles. Each report style contains one or more sections that map to groups in the report:

    Single-section report styles: Tabular, Form, Mailing Label, Form Letter

    Multiple section report styles: Group Left, Group Above, Matrix, Matrix with Group

    For the report styles that support multiple groups, you can create additional sections as needed. Sections are mapped to groups as follows:

    Same number of groups as sections: one-to-one mapping (the first section is mapped to the first group, the second section to the second group, and so on).

    More groups than sections: one-to-one mapping until the next-to-last section. Then, all subsequent groups are mapped to the next-to-last section, and the last group is mapped to the last section. If only one section exists, all groups are mapped to it.

    More sections than groups: one-to-one mapping until the next-to-last group. Then, the last group is mapped to the last section.

    See also

    Section 3.12.2, "Defining default template attributes"

    Section 3.12.3, "Defining override template attributes"

    2.7.3 About applying templates

    When you apply a template to a report, all of the following objects, properties, and attributes from the template are applied to the current report section:

    In addition, all of the layout objects in the margin of the template are copied into the same location in the current report section.

    Usage notes
    See also

    Section 3.12.4, "Applying a template to a report"

    2.7.4 About inheritance in templates

    In templates, Sections, Frames, Fields, Labels, Headings, and Summaries properties all may inherit their values.

    Default properties

    The Default properties inherit the values preset by Reports Builder. When a property is set to its default Reports Builder value, the icon next to it in the Property Inspector is a small circle. Default properties become localized when you change their values, or select them and click the Localize Property button in the toolbar. When a property is localized, the icon next to it changes to a square. To return the properties to their inherited values, select the properties and click the Inherit Property button in the toolbar.

    Override properties

    The properties of Override Sections inherit their values from the Default properties. When a property inherits from a Default property, the icon next to it in the Property Inspector is an arrow. Properties in the Override Sections become localized when you change their values, or select them and click the Localize Property button in the toolbar. When a property is localized, the icon next to it changes to an arrow with a red cross through it. To return the values of properties in the Override Sections to their inherited values, select the properties and click the Inherit Property button in the toolbar.

    2.7.5 About the Template Editor

    The Template Editor is a work area in which you can define objects and formatting properties for your templates. It is similar to the Paper Layout view of the Report Editor. You can create, delete, and modify objects (e.g., page numbers, text, and graphics) in the margin area. You cannot create and delete objects in the body area, but you can modify the properties of body objects in the Property Inspector (Tools > Property Inspector).

    The Report Style drop-down list allows you to view the layout for a selected report style. To define default settings for all report styles, you can choose Default from the Report Style drop-down list. To make changes for an individual report style, you can select that report style from the Report Style drop-down list to specify settings that override the default.

    Access

    You can access the Template Editor in the following ways:

    When creating a new template:

    When displaying an existing template:

    2.8 Output Formats and Capabilities

    The topics in this section discuss the various output formats and capabilities in Reports Builder.

    2.8.1 About format order

    In prior releases, Oracle Reports formatted the sections of a report in sequential order: Header section, followed by Main section, followed by Trailer section. This release introduces the capability to change the order in which the three sections of a report are formatted.


    Note:

    Regardless of the order in which the report sections are formatted, the output order is unchanged: Header section first, then Main section, then Trailer section.


    The format order can be set in either of the following ways:

    This feature is useful for formatting any report section first to retrieve information that is known only at the time of formatting, such as page numbers, then using that information in the formatting of a previous section.

    For example, to create a table of contents (TOC) for a report, you can format the Main section first and use report triggers to build a table containing the TOC entries. When the first element for the TOC is formatted, a trigger fires and creates a row in the TOC table containing the TOC entry and the page number. After the Main section has completed formatting, the format order setting can define that the Header section is formatted next. The Header section can contain a report block based on the TOC table. After formatting, you can output your report with a TOC (the Header section), followed by the report body (the Main section), followed by the Trailer section.

    For the steps to create a TOC for a report, see the example reports in Chapter 34, "Building a Paper Report with a Simple Table of Contents and Index" and Chapter 35, "Building a Paper Report with a Multilevel Table of Contents".

    A note about page numbering:

    The page numbering of a report follows the format order. For example, in a report with a Header section of 2 pages, a Main section of 8 pages, and a Trailer section of 3 pages, with Format Order set to Main-Trailer-Header, the page numbering will be as follows in the report output: 12, 13 (Header pages, which were formatted last), 1, 2, 3, 4, 5, 6, 7, 8, (Main pages, which were formatted first) 9, 10, 11(Trailer pages, which were formatted second).

    2.8.2 About batch reporting

    If you do not need to examine report output in the Previewer (e.g., you may have to generate large volumes of output from a fully-tested report or run several reports in succession), you can run your report in batch using rwrun. This leaves you free to pursue other tasks while your reports are running.

    You can run reports in batch mode from the command line, or use a command file to specify arguments. A command file can save you a great deal of typing if you wish to run several reports using the same set of arguments.

    You can also use the Reports Server to batch process reports by specifying BACKGROUND=YES on the command line (valid for rwclient, rwcgi, or rwservlet) to run reports asynchronously (the client sends the call to the server, then continues with other processes without waiting for the report job to complete; if the client process is killed, the job is canceled).

    See also

    Section 3.7.2, "Running a report from the command line"

    Section 3.7.3, "Running a report using a command file"

    The Reference > Command Line section of the Reports Builder online help (for information about BATCH and BACKGROUND)

    2.8.3 About report distribution

    Report distribution enables you to design a report that can generate multiple output formats and be distributed to multiple destinations from a single run of the report.   You can create distributions for an entire report, and for individual sections of the report. For example, in a single run of a report, you can generate HTML output, send a PostScript version to the printer, and also e-mail any or all sections of the report to a distribution list.

    You can define the distribution for a report in any of the following ways:

    For detailed information about when you'd use the report-level vs. section-level distribution, see Chapter 36, "Bursting and Distributing a Report". This chapter also covers distribution based on a repeating section, then e-mail those sections based on the distribution.xml.

    To distribute a report, you first define the distribution, then enable the distribution, as described in Section 3.7.11, "Distributing a report to multiple destinations".

    Usage notes

    2.8.3.1 About the DST file

    As an alternative to defining the distribution for a report or report section in the Distribution dialog box, you can also create a DST file and specify its name on the command line via the DESTINATION keyword to distribute the report.


    Note:

    This method is supported for backward compatibility; the preferred and recommended method of distributing reports is via the Distribution dialog box or using XML, as described in the chapter "Creating Advanced Distributions" in the Oracle Application Server Reports Services Publishing Reports to the Web manual, available on the Oracle Technology Network Oracle Reports Documentation page (http://otn.oracle.com/docs/products/reports/content.html).


    If a DST file is specified on the command line, the distribution that it defines overrides the distribution defined using the Distribution dialog box.


    Note:

    If you trace report distribution to identify distribution errors (see Section 3.14.19, "Tracing report distribution"), the trace file format is very similar to the DST file, so you can cut and paste to generate a DST file from the trace file.


    The format of each line of a DST file is as follows:

    dist_ID: output_def
    
    

    where


  • Go to previous page Go to next page
    Oracle
    Copyright © 2002, 2003 Oracle Corporation.

    All Rights Reserved.
    Go To Documentation Library
    Home
    Go To Table Of Contents
    Contents
    Go To Index
    Index