NAME

Oracle::Debug - A Perl (perldb-like) interface to the Oracle DBMS_DEBUG package for debugging PL/SQL programs.

SYNOPSIS

./oradb

ABSTRACT

A perl-debugger-like interface to the Oracle DBMS_DEBUG package for debugging PL/SQL programs.

The initial impetus for creating this was to get a command-line interface, similar in instruction set and feel to the perl debugger. For this reason, it may be beneficial for a user of this module, or at least the intended oradb interface, to be familiar with the perl debugger first.

DESCRIPTION

There are really 2 parts to this exersize:

DB

The current Oracle chunk is a package which can be used directly to debug PL/SQL without involving perl at all, but which has similar commands to the perl debugger.

Please see the packages/header.sql file for credits for the original db PL/SQL.

oradb

The Perl chunk implements a perl-debugger-like interface to the Oracle debugger itself, partially via the DB library referenced above.

In both cases much more conveniently from the command line, than the vanilla Oracle packages themselves. In fairness DBMS_DEBUG is probably designed to be used from a GUI of some sort, but this module focuses on it from a command line usage.

NOTES

Ignore any methods which are prefixed with an underscore (_)

We use a special table rfi_oracle_debug for our own purposes.

Set Oracle_Debug=1 for debugging information.

METHODS

new

Create a new Oracle::Debug object

my $o_debug = Oracle::Debug->new(\%dbconnectdata);
_prime

Prime the object and connect to the db

Also ensure we are able to talk to Probe

$o_debug->_prime;
dbh

Return the database handle

my $dbh = $o_debug->dbh;
_connect

Connect to the database

getarow

Get a row

my ($res) = $o_debug->getarow($sql);
help

Print the help listings where levl is one of:

h    (simple)

h h  (detail)

h b  (help for break command etc.)

$o_oradb->help($levl);
parse

Parse the input command to the appropriate method

$o_oradb->parse($cmd, $input);
do

Wrapper for oradb->dbh->do() - internally we still use prepare and execute.

$o_oradb->do($sql);
recompile

Recompile this procedure|function|package for debugging

my $i_res = $oradb->recompile('PROCEDURE x');
perl

Run a chunk of perl

$o_oradb->perl($perl);
shell

Run a shell command

$o_oradb->shell($shellcommand);
sql

Run a chunk of SQL (select only)

$o_oradb->sql($sql);
run

Run a chunk

$o_oradb->run($sql);
target

Run the target session

$o_oradb->target;
start_target

Get the target session id(given) and stick it in our table (by process_id)

my $dbid = $oradb->start_target($dbid);
$x_res = $self->do('COMMIT');
debugger

Run the debugger

$o_debug->debugger;
start_debug

Start the debugger session

my $i_res = $oradb->start_debug($db_session_id, $pid);
sync

Blocks debug session until we exec in target session

my $i_res = $oradb->sync;
exec

Runs the given statement against the target session

my $i_res = $oradb->exec($call);
execute

Runs the given statement against the target session

my $i_res = $oradb->execute($xsql);
break

Set a breakpoint

my $i_res = $oradb->break("PROCNAME $i_line");
continue

Continue execution until given breakpoints

my $i_res = $oradb->continue;
next

Step over the next line

my $i_res = $oradb->next;
step

Step into the next statement

my $i_res = $oradb->step;
return

Return from the current scope

my $i_res = $oradb->return;
runtime

Print runtime_info via dbms_output

$oradb->runtime;
backtrace

Print backtrace from runtime info via dbms_output

$oradb->backtrace();
list_source

Print source

$oradb->list_source();
list_breakpoints

Print breakpoint info

$oradb->list_breakpoints;
history

Display the command history

print $o_oradb->history;	
rerun

Rerun a command from the history list

$o_oradb->rerun($histno);
self_check

Check the connections (fails otherwise)

my $i_ok = $oradb->self_check();
probe_version

Log the Probe version

print $oradb->probe_version;
ping

Ping the target process (gives an ORA-error if no target)

my $i_ok = $oradb->ping; # 9.2
is_running

Check the target is still running - ???

my $i_ok = $oradb->is_running; # 9.2
plsql_errstr

Get PL/SQL error string

$o_debug->plsql_errstr;
put_msg

Put debug message info

$o_debug->put_msg($msg);
get_msg

Get debug message info

print $o_debug->get_msg;
get_val

Get the value of a variable

my $val = $o_debug->get_val($varname);
audit

Get auditing info

my ($audsid) = $o_debug->audit;
log

Log handler (currently just prints to STDOUT)

$o_debug->log("this");
quit

Quit the debugger

$o_oradb->quit;
error

Error handler

fatal

Fatal error handler

detach

Tell the target session to detach itself

$o_debug->detach;

SEE ALSO

DBD::Oracle

perldebug

AUTHOR

Richard Foley, <Oracle_Debug@rfi.net>

COPYRIGHT AND LICENSE

Copyright 2003 by Richard Foley

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

4 POD Errors

The following errors were encountered while parsing the POD:

Around line 307:

=cut found outside a pod block. Skipping to next block.

Around line 591:

Unknown directive: =rjsf

Around line 684:

Unknown directive: =rjsf

Around line 1002:

Unknown directive: =rjsf