Oracle
Reports is shipped with a collection of PL/SQL constructs that contain
many
functions, procedures, and exceptions that you can reference in your
libraries
or reports. The name of Oracle Reports'
package is SRW. Therefore,
anytime
you reference a construct in the SRW package, you must prefix it with
SRW
(such as, SRW.DO_SQL).
SRW
Packages
Oracle
Reports contains the following packages:
- SRW.BREAK - SRW.RUN_REPORT_BATCHNO
- SRW.CONTEXT_FAILURE -
SRW.SET_FIELD_CHAR
- SRW.DO_SQL - SRW.SET_FIELD_DATE
- SRW.DO_SQL_FAILURE - SRW.SET_FIELD_NUM
- SRW.GETERR_RUN - SRW.SET_MAXROW
- SRW.GET_PAGE_NUM - SRW.TRACE_ADD_OPTION
- SRW.INTEGER_ERROR - SRW.TRACE_END
- SRW.MAXROW_INERR - SRW.TRACE_REM_OPTION
- SRW.MAXROW_UNSET - SRW.TRACE_START
- SRW.MESSAGE - SRW.TRUNCATED_VALUE
- SRW.NULL_ARGUMENTS - SRW.UNKNOWN_QUERY
- SRW.PROGRAM_ABORT - SRW.UNKNOWN_USER_EXIT
- SRW.REFERENCE - SRW.USER_EXIT
- SRW.RUN_REPORT - SRW.USER_EXIT20
- SRW.SET_ATTR - SRW.USER_EXIT_FAILURE
- SRW.RUN_REPORT_FAILURE
Commonly
Used SRW Packages And Examples
SRW.DO_SQL
executes a specified SQL statement. This
procedure executes
any
DDL or DML statements. However, DML
statements are usually faster
when
they are in PL/SQL than when executed via SRW.DO_SQL. Since you
cannot
perform a DDL statement in PL/SQL, this packaged procedure is useful
for
performing them within Reports rather than using a user exit.
Avoid
DDL statements that modify the tables on which the report is based. A
snapshot
of the tables is taken prior to report execution and must remain
valid
throughout the execution of the report.
Example
1 - SRW.DO_SQL
Syntax/Explanation:
SRW.DO_SQL(sql_statement CHAR); -- Executes
specified SQL statement.
SRW.DO_SQL_FAILURE; -- Stops report execution
upon SRW.DO_SQL failure.
SRW.MESSAGE(msg_number NUMBER, msg_text
CHAR);
-- Displays a specified
message and message number.
SRW.PROGRAM_ABORT; -- Stops execution of report when raised.
Example:
Create
a temporary table named TEMP prior to the Runtime Parameter Form:
FUNCTION
createtab RETURN BOOLEAN IS
BEGIN
SRW.DO_SQL(CREATE TABLE temp (empno NUMBER
NOT NULL PRIMARY KEY,
sal NUMBER (10,2))
PCTFREE 5 PCTUSED
75');
RETURN TRUE;
EXCEPTION
WHEN SRW.DO_SQL_FAILURE THEN
SRW.MESSAGE(100,'ERROR WHILE CREATING
CHECK TABLE.');
SRW.MESSAGE(50, 'REPORT WAS STOPPED
BEFORE THE PARM FORM.');
RAISE SRW.PROGRAM_ABORT;
END;
Example
2 - SRW.RUN_REPORT
Syntax/Explanation:
SRW.RUN_REPORT(command_line CHAR); -- Executes specified R25RUN command
SRW.RUN_REPORT_FAILURE; -- Stops report execution when failure of
-- SRW.RUN_REPORT
occurs.
Example:
Drill
Down Report called from a report button:
FUNCTION
foo RETURN BOOLEAN IS
BEGIN
SRW.RUN_REPORT('report=REP_A
p_parm1=20'); -- calls report REP_A
and
EXCEPTION --
display to screen;
WHEN SRW.RUN_REPORT_FAILURE THEN -- passes value 20 to the
SRW.MESSAGE(100, 'ERROR CALLING
REPORT.') -- p_parm1 parameter
RAISE SRW.PROGRAM_ABORT;
RETURN TRUE;
END;
Note
that you can only call another report to the screen using SRW.RUN_REPORT
from
a button. If you issue SRW.RUN_REPORT
from a report trigger, you
must
pass BATCH=YES. Therefore, DESTYPE can
only be FILE, PRINTER, or MAIL.
Example
3 - SRW.SET_ATTR
Syntax/Explanation
SRW.SET_ATTR
applies attribute settings, such as font size or color, to layout
objects. This procedure applies formatting attributes
to the current frame,
repeating
frame, field, or boilerplate object. You
specify which formatting
attributes
should be applied to an object by defining a mask. A mask is a
collection
of attributes; each attribute has one or more values. You can
change
a number of attributes, such as the borderwidth, background border
color,
border pattern, foreground border color, fill pattern, global text
color,
weight and several other attributes. For
a complete list, refer to
the
"The Oracle Reports PL/SQL Package: SRW" section in the
"PL/SQL
Interface" chapter of the Oracle Reports Reference Manual.
SRW.SET_ATTR(object_id
NUMBER, attr SRW.GENERIC_ATTR);
object_id Is always zero. (The object must always set its own
attributes.)
attr Is srw.attr (that is, the attributes to
change and their values).
Example:
If
salary equals 2000, this code segment sets the following attributes:
Border width = 1
Foreground border color = red
Background border color = blue
Border pattern = checker
Foreground fill color = yellow
Background fill color = green
Fill pattern = crisscross
IF
:sal = 2000 THEN
SRW.ATTR.MASK :=
SRW.BORDERWIDTH_ATTR +
SRW.FBCOLOR_ATTR +
SRW.BBCOLOR_ATTR +
SRW.BORDPATT_ATTR +
SRW.FFCOLOR_ATTR +
SRW.BFCOLOR_ATTR +
SRW.FILLPATT_ATTR;
SRW.ATTR.BORDERWIDTH := 1;
SRW.ATTR.FBCOLOR := 'red';
SRW.ATTR.BBCOLOR :=
'blue';
SRW.ATTR.BORDPATT := 'checker';
SRW.ATTR.FFCOLOR := 'yellow';
SRW.ATTR.BFCOLOR := 'green';
SRW.ATTR.FILLPATT := 'crisscross';
SRW.SET_ATTR(0,
SRW.ATTR);
END
IF;
RETURN
TRUE;
Example
4 - SRW. SET_FIELD
Syntax/Explanation:
SRW.SET_FIELD_CHAR(object_id,
text CHAR);
SRW.SET_FIELD_DATE(object_id,
date DATE);
SRW.SET_FIELD_NUM(object_id,
number NUMBER);
These
SRW SET_FIELD procedures are very useful in format triggers. They are
often
used to change the data that will be displayed in a particular item
based
on a specific condition. These are
invaluable, since you cannot use
assignment
statements to set a field's value in Reports.
SRW.SET_FIELD_XXX
must
be used to accomplish this.
Example:
To
display the text "LOW" in the salary_range field for every employee
whose
salary
is less than 20,000, create the following format trigger on the
salary_range
field.
FUNCTION
chgfield RETURN BOOLEAN IS
BEGIN
IF :sal < 20000 THEN
SRW.SET_FIELD_CHAR(0, 'LOW');
ELSE
END IF;
RETURN
TRUE;
END;
For
additional examples using the SRW.SET_FIELD_XXXX procedures in format
triggers,
see:
Note31364.1 Using Format Triggers in
Reports.