Oracle8i Supplied PL/SQL Packages Reference
Release 2 (8.1.6)

Part Number A76936-01

Library

Product

Contents

Index

Go to previous page Go to beginning of chapter Go to next page

DBMS_DEBUG, 2 of 2


Summary of Subprograms

Table 8-1 DBMS_DEBUG Package Subprograms
Subprogram  Description 
PROBE_VERSION Procedure
 

Returns the version number of DBMS_DEBUG on the server. 

SELF_CHECK Procedure
 

Performs an internal consistency check. 

SET_TIMEOUT Function
 

Sets the timeout value. 

INITIALIZE Function
 

Sets debugID in target session. 

DEBUG_ON Procedure
 

Turns debug-mode on. 

DEBUG_OFF Procedure
 

Turns debug-mode off. 

ATTACH_SESSION Procedure
 

Notifies the debug session about the target debugID. 

SYNCHRONIZE Function
 

Waits for program to start running. 

SHOW_SOURCE Procedure
 

Fetches program source. 

PRINT_BACKTRACE 
Procedure
 

Prints a stack backtrace. 

CONTINUE Function
 

Continues execution of the target program. 

SET_BREAKPOINT Function
 

Sets a breakpoint in a program unit. 

DELETE_BREAKPOINT 
Function
 

Deletes a breakpoint. 

DISABLE_BREAKPOINT 
Function
 

Disables a breakpoint. 

ENABLE_BREAKPOINT 
Function
 

Activates an existing breakpoint. 

SHOW_BREAKPOINTS 
Procedure
 

Returns a listing of the current breakpoints. 

GET_VALUE Function
 

Gets a value from the currently-running program. 

SET_VALUE Function
 

Sets a value in the currently-running program. 

DETACH_SESSION Procedure
 

Stops debugging the target program. 

GET_RUNTIME_INFO 
Function
 

Returns information about the current program. 

GET_INDEXES Function
 

Returns the set of indexes for an indexed table. 

EXECUTE Procedure
 

Executes SQL or PL/SQL in the target session. 

Common Section

These following subprograms may be called in either the target or the debug session:

PROBE_VERSION Procedure

This procedure returns the version number of DBMS_DEBUG on the server.

Syntax

DBMS_DEBUG.PROBE_VERSION (
   major out BINARY_INTEGER,
   minor out BINARY_INTEGER); 

Parameters

Table 8-2 PROBE_VERSION Procedure Parameters
Parameter  Description 
major
 

Major version number. 

minor
 

Minor version number: increments as functionality is added. 

SELF_CHECK Procedure

This procedure performs an internal consistency check. SELF_CHECK also runs a communications test to ensure that the Probe processes are able to communicate.

If SELF_CHECK does not return successfully, then an incorrect version of DBMS_DEBUG was probably installed on this server. The solution is to install the correct version (pbload.sql loads DBMS_DEBUG and the other relevant packages).

Syntax

DBMS_DEBUG.SELF_CHECK (
   timeout IN binary_integer := 60);

Parameters

Table 8-3 SELF_CHECK Procedure Parameters
Parameter  Description 
timeout
 

The timeout to use for the communication test. Default is 60 seconds. 

Exceptions

Table 8-4 SELF_CHECK Procedure Exceptions
Exception  Description 
OER-6516
 

Probe version is inconsistent. 

pipe_creation_failure
 

Could not create a pipe. 

pipe_send_failure
 

Could not write data to the pipe. 

pipe_receive_failure
 

Could not read data from the pipe. 

pipe_datatype_mismatch
 

Datatype in the pipe was wrong. 

pipe_data_error
 

Data got garbled in the pipe. 

All of these exceptions are fatal. They indicate a serious problem with Probe that prevents it from working correctly.

SET_TIMEOUT Function

This function sets the timeout value and returns the new timeout value.

Syntax

DBMS_DEBUG.SET_TIMEOUT (
   timeout BINARY_INTEGER) 
  RETURN BINARY_INTEGER;

Parameters

Table 8-5 SET_TIMEOUT Function Parameters
Parameter  Description 
timeout
 

The timeout to use for communication between the target and debug sessions.  

TARGET SESSION Section

The following subprograms are run in the target session (the session that is to be debugged):

INITIALIZE Function

This function initializes the target session for debugging.

Syntax

DBMS_DEBUG.INITIALIZE (
   debug_session_id  IN VARCHAR2       := NULL, 
   diagnostics       IN BINARY_INTEGER := 0)
  RETURN VARCHAR2; 

Parameters

Table 8-6 INITIALIZE Function Parameters
Parameter  Description 
debug_session_id
 

Name of session ID. If NULL, then a unique ID is generated. 

diagnostics
 

Indicates whether to dump diagnostic output to the tracefile.

0 = (default) no diagnostics

1 = print diagnostics 

Returns

The newly-registered debug session ID (debugID)

DEBUG_ON Procedure

This procedure marks the target session so that all PL/SQL is run in debug mode. This must be done before any debugging can take place.

Syntax

DBMS_DEBUG.DEBUG_ON (
   no_client_side_plsql_engine BOOLEAN := TRUE,
   immediate                   BOOLEAN := FALSE); 

Parameters

Table 8-7 DEBUG_ON Procedure Parameters
Parameter  Description 
no_client_side_plsql_
engine
 

Should be left to its default value unless the debugging session is taking place from a client-side PL/SQL engine. 

immediate
 

If this is TRUE, then the interpreter immediately switches itself into debug-mode, instead of continuing in regular mode for the duration of the call.  


Caution:

There must be a debug session waiting if immediate is TRUE. 


DEBUG_OFF Procedure

This procedure notifies the target session that debugging should no longer take place in that session. It is not necessary to call this function before ending the session.

Syntax

DBMS_DEBUG.DEBUG_OFF;

Parameters

None.

Usage Notes

The server does not handle this entrypoint specially. Therefore, it attempts to debug this entrypoint.

Debug Session Section

The following subprograms should be run in the debug session only:

ATTACH_SESSION Procedure

This procedure notifies the debug session about the target program.

Syntax

DBMS_DEBUG.ATTACH_SESSION (
   debug_session_id  IN VARCHAR2,
   diagnostics       IN BINARY_INTEGER := 0); 

Parameters

Table 8-8 ATTACH_SESSION Procedure Parameters
Parameter  Description 
debug_session_id
 

Debug ID from a call to INITIALIZE in target session. 

diagnostics
 

Generate diagnostic output if non-zero. 

SYNCHRONIZE Function

This function waits until the target program signals an event. If info_requested is not NULL, then it calls GET_RUNTIME_INFO.

Syntax

DBMS_DEBUG.SYNCHRONIZE (
   run_info       OUT  runtime_info,
   info_requested IN   BINARY_INTEGER := NULL)
  RETURN BINARY_INTEGER;

Parameters

Table 8-9 SYNCHRONIZE Function Parameters
Parameter  Description 
run_info
 

Structure in which to write information about the program. By default, this includes information about what program is running and at which line execution has paused. 

info_requested
 

Optional bit-field in which to request information other than the default (which is info_getStackDepth + info_getLineInfo). 0 means that no information is requested at all.

See "Information Flags"

Returns

Table 8-10 SYNCHRONIZE Function Returns
Return  Description 
success
 

 

error_timeout
 

Timed out before the program started execution. 

error_communication
 

Other communication error. 

SHOW_SOURCE Procedure

The best way to get the source code (for a program that is being run) is to use SQL. For example:

DECLARE
	   info DBMS_DEBUG.runtime_info;
BEGIN
   -- call DBMS_DEBUG.SYNCHRONIZE, CONTINUE,
   -- or GET_RUNTIME_INFO to fill in 'info'
   SELECT text INTO <buffer> FROM all_source
   WHERE owner = info.Program.Owner
     AND name  = info.Program.Name
     AND line  = info.Line#;
END;

However, this does not work for non-persistent programs (for example, anonymous blocks and trigger invocation blocks). For non-persistent programs, call SHOW_SOURCE. There are two flavors: one returns an indexed table of source lines, and the other returns a packed (and formatted) buffer.

There are two overloaded SHOW_SOURCE procedures.

Syntax

DBMS_DEBUG.SHOW_SOURCE (
   first_line  IN   BINARY_INTEGER,
   last_line   IN   BINARY_INTEGER,
   source      OUT  vc2_table);

Parameters

Table 8-11 SHOW_SOURCE Procedure Parameters
Parameter  Description 
first_line
 

Line number of first line to fetch. (PL/SQL programs always start at line 1 and have no holes.) 

last_line
 

Line number of last line to fetch. No lines are fetched past the end of the program. 

source
 

The resulting table, which may be indexed by line#. 

Returns

An indexed table of source-lines. The source lines are stored starting at first_line. If any error occurs, then the table is empty.

Usage Notes

This second overloading of SHOW_SOURCE returns the source in a formatted buffer, complete with line-numbers. It is faster than the indexed table version, but it does not guarantee to fetch all the source.

If the source does not fit in bufferlength (buflen), then additional pieces can be retrieved using the GET_MORE_SOURCE procedure (pieces returns the number of additional pieces that need to be retrieved).

Syntax

DBMS_DEBUG.SHOW_SOURCE (
   first_line   IN     BINARY_INTEGER,
   last_line    IN     BINARY_INTEGER,
   window       IN     BINARY_INTEGER,
   print_arrow  IN     BINARY_INTEGER,
   buffer       IN OUT VARCHAR2,
   buflen       IN     BINARY_INTEGER,
   pieces       OUT    BINARY_INTEGER);  

Parameters

Table 8-12 SHOW_SOURCE Procedure Parameters
Parameter  Description 
first_line
 

Smallest line-number to print. 

last_line
 

Largest line-number to print. 

window
 

'Window' of lines (the number of lines around the current source line). 

print_arrow
 

Non-zero means to print an arrow before the current line. 

buffer
 

Buffer in which to place the source listing. 

buflen
 

Length of buffer. 

pieces
 

Set to non-zero if not all the source could be placed into the given buffer. 

PRINT_BACKTRACE Procedure

This procedure prints a backtrace listing of the current execution stack. This should only be called if a program is currently running.

There are two overloaded PRINT_BACKTRACE procedures.

Syntax

DBMS_DEBUG.PRINT_BACKTRACE (
  listing IN OUT VARCHAR2); 

Parameters

Table 8-13 PRINT_BACKTRACE Procedure Parameters
Parameter  Description 
listing
 

A formatted character buffer with embedded newlines. 

Syntax

DBMS_DEBUG.PRINT_BACKTRACE (
   backtrace OUT backtrace_table); 

Parameters

Table 8-14 PRINT_BACKTRACE Procedure Parameters
Parameter  Description 
backtrace
 

1-based indexed table of backtrace entries. The currently-running procedure is the last entry in the table (that is, the frame numbering is the same as that used by GET_VALUE). Entry 1 is the oldest procedure on the stack. 

CONTINUE Function

This function passes the given breakflags (a mask of the events that are of interest) to Probe in the target process. It tells Probe to continue execution of the target process, and it waits until the target process runs to completion or signals an event.

If info_requested is not NULL, then calls GET_RUNTIME_INFO.

Syntax

DBMS_DEBUG.CONTINUE (
   run_info       IN OUT runtime_info,
   breakflags     IN     BINARY_INTEGER,
   info_requested IN     BINARY_INTEGER := NULL)
  RETURN BINARY_INTEGER;

Parameters

Table 8-15 CONTINUE Function Parameters
Parameter  Description 
run_info
 

Information about the state of the program. 

breakflags
 

Mask of events that are of interest. See "Breakflags"

info_requested
 

Which information should be returned in run_info when the program stops. See "Information Flags"

Returns

Table 8-16 CONTINUE Function Returns
Return  Description 
success
 

 

error_timeout
 

Timed out before the program started running. 

error_communication
 

Other communication error. 

SET_BREAKPOINT Function

This function sets a breakpoint in a program unit, which persists for the current session. Execution pauses if the target program reaches the breakpoint.

Syntax

DBMS_DEBUG.SET_BREAKPOINT (
   program     IN  program_info,
   line#       IN  BINARY_INTEGER,
   breakpoint# OUT BINARY_INTEGER,
   fuzzy       IN  BINARY_INTEGER := 0,
   iterations  IN  BINARY_INTEGER := 0)
  RETURN BINARY_INTEGER;

Parameters

Table 8-17 SET_BREAKPOINT Function Parameters
Parameter  Description 
program
 

Information about the program unit in which the breakpoint is to be set. (In version 2.1 and later, the namespace, name, owner, and dblink may be set to NULL, in which case the breakpoint is placed in the currently-running program unit.) 

line#
 

Line at which the breakpoint is to be set. 

breakpoint#
 

On successful completion, contains the unique breakpoint number by which to refer to the breakpoint. 

fuzzy
 

Only applicable if there is no executable code at the specified line:

0 means return error_illegal_line.

1 means search forward for an adjacent line at which to place the breakpoint.

-1 means search backwards for an adjacent line at which to place the breakpoint. 

iterations
 

Number of times to wait before signalling this breakpoint. 


Note:

The fuzzy and iterations parameters are not yet implemented. 


Returns

Table 8-18 SET_BREAKPOINT Function Returns
Return  Description 
success
 

 

error_illegal_line
 

Cannot set a breakpoint at that line. 

error_bad_handle
 

No such program unit exists. 

DELETE_BREAKPOINT Function

This function deletes a breakpoint.

Syntax

DBMS_DEBUG.DELETE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER;

Parameters

Table 8-19 DELETE_BREAKPOINT Function Parameters
Parameter  Description 
breakpoint
 

Breakpoint number from a previous call to SET_BREAKPOINT

Returns

Table 8-20 DELETE_BREAKPOINT Function Returns
Return  Description 
success
 

 

error_no_such_breakpt
 

No such breakpoint exists. 

error_idle_breakpt
 

Cannot delete an unused breakpoint. 

error_stale_breakpt
 

The program unit was redefined since the breakpoint was set. 

DISABLE_BREAKPOINT Function

This function makes an existing breakpoint inactive, but it leaves it in place.

Syntax

DBMS_DEBUG.DISABLE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER; 

Parameters

Table 8-21 DISABLE_BREAKPOINT Function Parameters
Parameter  Description 
breakpoint
 

Breakpoint number from a previous call to SET_BREAKPOINT

Returns

Table 8-22 DISABLE_BREAKPOINT Function Returns
Returns  Description 
success
 

 

error_no_such_breakpt
 

No such breakpoint exists. 

error_idle_breakpt
 

Cannot disable an unused breakpoint. 

ENABLE_BREAKPOINT Function

This function is the reverse of disabling. This enables a previously disabled breakpoint.

Syntax

DBMS_DEBUG.ENABLE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER;

Parameters

Table 8-23 ENABLE_BREAKPOINT Function Parameters
Parameter  Description 
breakpoint
 

Breakpoint number from a previous call to SET_BREAKPOINT

Returns

Table 8-24 ENABLE_BREAKPOINT Function Returns
Return  Description 
success
 

 

error_no_such_breakpt
 

No such breakpoint exists. 

error_idle_breakpt
 

Cannot enable an unused breakpoint. 

SHOW_BREAKPOINTS Procedure

This procedure returns a listing of the current breakpoints. There are two overloaded SHOW_BREAKPOINTS procedures.

Syntax

DBMS_DEBUG.SHOW_BREAKPOINTS (
   listing    IN OUT VARCHAR2);

Parameters

Table 8-25 SHOW_BREAKPOINTS Procedure Parameters
Parameter  Description 
listing
 

A formatted buffer (including newlines) of the breakpoints. 

Syntax

DBMS_DEBUG.SHOW_BREAKPOINTS (
   listing  OUT breakpoint_table);

Parameters

Table 8-26 SHOW_BREAKPOINTS Procedure Parameters
Parameter  Description 
listing
 

Indexed table of breakpoint entries. The breakpoint number is indicated by the index into the table. Breakpoint numbers start at 1 and are reused when deleted. 

GET_VALUE Function

This function gets a value from the currently-running program. There are two overloaded GET_VALUE functions.

Syntax

DBMS_DEBUG.GET_VALUE (
   variable_name  IN  VARCHAR2,
   frame#         IN  BINARY_INTEGER,
   scalar_value   OUT VARCHAR2,
   format         IN  VARCHAR2 := NULL)
  RETURN BINARY_INTEGER;

Parameters

Table 8-27 GET_VALUE Function Parameters
Parameter  Description 
variable_name
 

Name of the variable or parameter. 

frame#
 

Frame in which it lives; 0 means the current procedure. 

scalar_value
 

Value. 

format
 

Optional date format to use, if meaningful. 

Returns

Table 8-28 GET_VALUE Function Returns
Return  Description 
success
 

 

error_bogus_frame
 

Frame does not exist. 

error_no_debug_info
 

Entrypoint has no debug information. 

error_no_such_object
 

variable_name does not exist in frame#. 

error_unknown_type
 

The type information in the debug information is illegible. 

error_nullvalue
 

Value is NULL

error_indexed_table
 

The object is a table, but no index was provided. 

This form of GET_VALUE is for fetching package variables. Instead of a frame#, it takes a handle, which describes the package containing the variable.

Syntax

DBMS_DEBUG.GET_VALUE (
   variable_name  IN  VARCHAR2,
   handle         IN  program_info,
   scalar_value   OUT VARCHAR2,
   format         IN  VARCHAR2 := NULL)
  RETURN BINARY_INTEGER;

Parameters

Table 8-29 GET_VALUE Function Parameters
Parameter  Description 
variable_name
 

Name of the variable or parameter. 

handle
 

Description of the package containing the variable. 

scalar_value
 

Value. 

format
 

Optional date format to use, if meaningful. 

Returns

Table 8-30 GET_VALUE Function Returns
Return  Description 
error_no_such_object
 

Either:

- Package does not exist.

- Package is not instantiated.

- User does not have privileges to debug the package.

- Object does not exist in the package. 

error_indexed_table
 

The object is a table, but no index was provided. 

Example

This example illustrates how to get the value with a given package PACK in schema SCOTT, containing variable VAR:

DECLARE
   handle     dbms_debug.program_info;
   resultbuf  VARCHAR2(500);
   retval     BINARY_INTEGER;
BEGIN
   handle.Owner     := 'SCOTT';
   handle.Name      := 'PACK';
   handle.namespace := dbms_debug.namespace_pkgspec_or_toplevel;
   retval           := dbms_debug.get_value('VAR', handle, resultbuf, NULL);
END;

SET_VALUE Function

This function sets a value in the currently-running program. There are two overloaded SET_VALUE functions.

Syntax

DBMS_DEBUG.SET_VALUE (
   frame#               IN binary_integer,
   assignment_statement IN varchar2) 
  RETURN BINARY_INTEGER;

Parameters

Table 8-31 SET_VALUE Function Parameters
Parameter  Description 
frame#
 

Frame in which the value is to be set; 0 means the currently executing frame. 

assignment_statement
 

An assignment statement (which must be legal PL/SQL) to run in order to set the value. For example, 'x := 3;'.

Only scalar values are supported in this release. The right side of the assignment statement must be a scalar. 

Returns

Table 8-32 SET_VALUE Function Returns
Return  Description 
success
 

 

error_illegal_value
 

Not possible to set it to that value. 

error_illegal_null
 

Cannot set to NULL because object type specifies it as 'not null'. 

error_value_malformed
 

Value is not a scalar. 

error_name_incomplete
 

The assignment statement does not resolve to a scalar. For example, 'x := 3;', if x is a record. 

This form of SET_VALUE sets the value of a package variable.

Syntax

DBMS_DEBUG.SET_VALUE (
   handle               IN program_info,
   assignment_statement IN VARCHAR2) 
  RETURN BINARY_INTEGER;  

Parameters

Table 8-33 SET_VALUE Function Parameters
Parameter  Description 
handle
 

Description of the package containing the variable. 

assignment_statement
 

An assignment statement (which must be legal PL/SQL) to run in order to set the value. For example, 'x := 3;'.

Only scalar values are supported in this release. The right side of the assignment statement must be a scalar. 

Table 8-34 SET_VALUE Function Returns
Return  Description 
error_no_such_object
 

Either:

- Package does not exist.

- Package is not instantiated.

- User does not have privileges to debug the package.

- Object does not exist in the package. 

In some cases, the PL/SQL compiler uses temporaries to access package variables, and Probe does not guarantee to update such temporaries. It is possible, although unlikely, that modification to a package variable using SET_VALUE might not take effect for a line or two.

Example

To set the value of SCOTT.PACK.var to 6:

DECLARE
   handle  dbms_debug.program_info;
   retval  BINARY_INTEGER;
BEGIN
   handle.Owner     := 'SCOTT';
   handle.Name      := 'PACK';
   handle.namespace := dbms_debug.namespace_pkgspec_or_toplevel;
   retval           := dbms_debug.set_value(handle, 'var := 6;');
END;

DETACH_SESSION Procedure

This procedure stops debugging the target program. This procedure may be called at any time, but it does not notify the target session that the debug session is detaching itself, and it does not abort execution of the target session. Therefore, care should be taken to ensure that the target session does not hang itself.

Syntax

DBMS_DEBUG.DETACH_SESSION;  

Parameters

None.

GET_RUNTIME_INFO Function

This function returns information about the current program. It is only needed if the info_requested parameter to SYNCHRONIZE or CONTINUE was set to 0.


Note:

This is currently only used by client-side PL/SQL. 


Syntax

DBMS_DEBUG.GET_RUNTIME_INFO (
   info_requested  IN  BINARY_INTEGER,
   run_info        OUT runtime_info)
  RETURN BINARY_INTEGER; 

Parameters

Table 8-35 GET_RUNTIME_INFO Function Parameters
Parameter  Description 
info_requested
 

Which information should be returned in run_info when the program stops. See "Information Flags"

run_info
 

Information about the state of the program. 

GET_INDEXES Function

Given a name of a variable or parameter, this function returns the set of its indexes, if it is an indexed table. An error is returned if it is not an indexed table.

Syntax

DBMS_DEBUG.GET_INDEXES (
   varname   IN  VARCHAR2,
   frame#    IN  BINARY_INTEGER,
   handle    IN  program_info,
   entries   OUT index_table) 
  RETURN BINARY_INTEGER;

Parameters

Table 8-36 GET_INDEXES Function Parameters
Parameter  Description 
varname
 

Name of the variable to get index information about. 

frame#
 

Number of frame in which the variable or parameter resides; NULL for a package variable. 

handle
 

Package description, if object is a package variable. 

entries
 

1-based table of the indexes. If non-NULL, then entries(1) contains the first index of the table, entries(2) contains the second index, and so on. 

Returns

Table 8-37 GET_INDEXES Function Returns
Return  Description 
error_no_such_object
 

Either:

- The package does not exist.

- The package is not instantiated.

- The user does not have privileges to debug the package.

- The object does not exist in the package. 

EXECUTE Procedure

This procedure executes SQL or PL/SQL code in the target session. The target session is assumed to be waiting at a breakpoint (or other event). The call to DBMS_DEBUG.EXECUTE occurs in the debug session, which then asks the target session to execute the code.

Syntax

DBMS_DEBUG.EXECUTE (
   what         IN VARCHAR2,
   frame#       IN BINARY_INTEGER,
   bind_results IN BINARY_INTEGER,
   results      IN OUT NOCOPY dbms_debug_vc2coll,
   errm         IN OUT NOCOPY VARCHAR2);

Parameters

Table 8-38 EXECUTE Procedure Parameters
Parameter  Description 
what
 

SQL or PL/SQL source to execute. 

frame#
 

The context in which to execute the code. Only -1 (global context) is supported at this time. 

bind_results
 

Whether the source wants to bind to results in order to return values from the target session.

0 = No

1 = Yes 

results
 

Collection in which to place results, if bind_results is not 0. 

errm
 

Error message, if an error occurred; otherwise, NULL

Example 1

This example executes a SQL statement. It returns no results.

DECLARE
   coll sys.dbms_debug_vc2coll; -- results (unused)
   errm VARCHAR2(100);          
BEGIN
   dbms_debug.execute('insert into emp(ename,empno,deptno) ' ||
                      'values(''LJE'', 1, 1)',
                      -1, 0, coll, errm);
END;

Example 2

This example executes a PL/SQL block, and it returns no results. The block is an autonomous transaction, which means that the value inserted into the table becomes visible in the debug session.

DECLARE
   coll sys.dbms_debug_vc2coll;
   errm VARCHAR2(100);
BEGIN
   dbms_debug.execute(
       'DECLARE PRAGMA autonomous_transaction; ' ||
       'BEGIN ' ||
       '   insert into emp(ename, empno, deptno) ' ||
       '   values(''LJE'', 1, 1); ' ||
       ' COMMIT; ' ||
       'END;',
       -1, 0, coll, errm);
END;

Example 3

This example executes a PL/SQL block, and it returns some results.

DECLARE
   coll sys.dbms_debug_vc2coll;
   errm VARCHAR2(100);
BEGIN
   dbms_debug.execute(
      'DECLARE ' ||
      '   pp SYS.dbms_debug_vc2coll := SYS.dbms_debug_vc2coll(); ' ||
      '   x  PLS_INTEGER; ' ||
      '   i  PLS_INTEGER := 1; ' ||
      'BEGIN ' ||
      '   SELECT COUNT(*) INTO x FROM emp; ' ||
      '   pp.EXTEND(x * 6); ' ||
      '   FOR c IN (SELECT * FROM emp) LOOP ' ||
      '      pp(i) := ''Ename: '' || c.ename; i := i+1; ' ||
      '      pp(i) := ''Empno: '' || c.empno; i := i+1; ' ||
      '      pp(i) := ''Job:   '' || c.job;   i := i+1; ' ||
      '      pp(i) := ''Mgr:   '' || c.mgr;   i := i+1; ' ||
      '      pp(i) := ''Sal:   '' || c.sal;   i := i+1; ' ||
      '      pp(i) := null;                   i := i+1; ' ||
      '   END LOOP; ' ||
      '   :1 := pp;' ||
      'END;',
       -1, 1, coll, errm);
   each := coll.FIRST;
   WHILE (each IS NOT NULL) LOOP
      dosomething(coll(each));
      each := coll.NEXT(each);
   END LOOP;
END;

PRINT_INSTANTIATIONS Procedure

This procedure returns a list of the packages that have been instantiated in the current session.

PARAMETERS

EXCEPTIONS

no_target_program - target session is not currently executing

NOTES

On return, "pkgs" contains a program_info for each instantiation. The valid fields are: Namespace, Name, Owner, and LibunitType.

In addition, Line# contains a bitmask of:

PROCEDURE print_instantiations (pkgs IN OUT NOCOPY backtrace_table, flags IN BINARY_INTEGER);

TARGET_PROGRAM_RUNNING Procedure

Return TRUE if the target session is currently executing a stored procedure, or FALSE if it is not.

FUNCTION target_program_running RETURN BOOLEAN;

PING Procedure

Ping the target session, to prevent it from timing out. Use this procedure when execution is suspended in the target session, for example at a breakpoint.

If the timeout_behavior is set to retry_on_timeout then this procedure is not necessary.

EXCEPTIONS

Oracle will display the no_target_program exception if there is no target program or if the target session is not currently waiting for input from the debug session.

PROCEDURE ping;

TIMEOUT OPTIONS

Timeout options for the target session are registered with the target session by calling set_timeout_behavior.

retry_on_timeout CONSTANT BINARY_INTEGER:= 0;

continue_on_timeout CONSTANT BINARY_INTEGER:= 1;

nodebug_on_timeout CONSTANT BINARY_INTEGER:= 2;

abort_on_timeout CONSTANT BINARY_INTEGER:= 3;

SET_TIMEOUT_BEHAVIOUR Procedure

This procedure tells Probe what to do with the target session when a timeout occurs. [This call is made in the target session.]

PARAMETERS

EXCEPTIONS

unimplemented - the requested behavior is not recognized

NOTES

The default behavior (if this procedure is not called) is continue_on_timeout, since it allows a debugger client to re-establish control (at the next event) but does not cause the target session to hang indefinitely.

PROCEDURE set_timeout_behavior (behavior IN PLS_INTEGER);

GET_TIMEOUT_BEHAVIOUR - Returns the current timeout behavior. [This call is made in the target session.]

FUNCTION get_timeout_behavior RETURN BINARY_INTEGER;

OER Breakpoints

Exceptions that are declared in PL/SQL programs are known as user-defined exceptions. In addition, there are Oracle Errors (OERs) that are returned from the Oracle kernel. To tie the two mechanisms together, PL/SQL provides the "exception_init" pragma that turns a user-defined exception into an OER, so that a PL/SQL handler may be used for it, and so that the PL/SQL engine can return OERs to the Oracle kernel. As of the current release, the only information available about an OER is its number. If two user-defined exceptions are exception_init'd to the same OER, they are indistinguishable.

INFORMATION FLAGS

info_getOerInfo CONSTANT PLS_INTEGER:= 32;

REASONS

reason_oer_breakpoint CONSTANT BINARY_INTEGER:= 26;

RUNTIME_INFO

Runtime_info gives context information about the running program.

Probe v2.4:

Added OER. It gets set if info_getOerInfo is set. The OER is a positive number. It can be translated into SQLCODE by translating 1403 to 100, 6510 to 1, and negating any other value.

TYPE runtime_info IS RECORD 
   ( 
       Line#            BINARY_INTEGER,   (duplicate of program.line#) 
       Terminated       BINARY_INTEGER,   has the program terminated? 
       Breakpoint       BINARY_INTEGER,   breakpoint number 
       StackDepth       BINARY_INTEGER,   number of frames on the stack 
       InterpreterDepth BINARY_INTEGER,   <reserved field> 
       Reason           BINARY_INTEGER,   reason for suspension 
       Program          program_info,     source location 
Following fields were added in Probe v2.4 oer              PLS_INTEGER       OER 
(exception), if any 
   ); 

oer_table

Used by show_breakpoints

TYPE oer_table IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;

- SET_OER_BREAKPOINT

Set a breakpoint on an OER. The breakpoint persists for the session (or until deleted), as with code breakpoints.

PARAMETERS

oer - the OER (a 4-byte positive number)

RETURNS

success

NOTES

Less functionality is supported on OER breakpoints than on code breakpoints. In particular, note that:

FUNCTION set_oer_breakpoint(oer IN PLS_INTEGER) RETURN PLS_INTEGER;

DELETE_OER_BREAKPOINT

Delete an OER breakpoint.

PARAMETERS

oer - the OER (positive 4-byte number) to delete

RETURNS

success

error_no_such_breakpt - no such OER breakpoint exists

FUNCTION delete_oer_breakpoint(oer IN PLS_INTEGER) RETURN PLS_INTEGER;

SHOW_BREAKPOINTS

PARAMETERS


Go to previous page Go to beginning of chapter Go to next page
Oracle
Copyright © 1996-2000, Oracle Corporation.

All Rights Reserved.

Library

Product

Contents

Index