I am working with:
Oracle relase 10.2.0.1.0,
perl v 5.8.0,
DBD::Oracle v1.21, and
DBI 1.602. running on
Red Hat Linux 2.4.21.
I am trying to write to an Oracle Stored procedure defined as:
CREATE OR REPLACE PROCEDURE JORCINO.osaq_enqueue(
ImmPacket_IN RAW,
ImmPacketLen_IN NUMBER,
ImmQSizeLimit_IN NUMBER,
BufferedOpt_IN NUMBER,
ImmEnqTimeMillis_OUT OUT NUMBER) AS ....
In perl ...
#
# declare the PL/SQL stored procedure OSAQ_ENQUEUE
#
$osaq = $dbh->prepare(q{
BEGIN
OSAQ_ENQUEUE(:ImmPacket,:ImmPacketLen,:ImmQSizeLimit,
:BufferedOpt,:ImmEnqTimeMillis) ;
END;
});
if ( ! defined($osaq) ) {
die "Prepare error: ",$dbh->errstr, "\n" ;
}
.
.
.
$osaq->bind_param(':ImmPacket', $packetCard
{ ORA_TYPE => ORA_RAW }) ;
$osaq->bind_param(':ImmPacketLen', length($packetCard)) ;
# bind size
$osaq->bind_param(":ImmQSizeLimit", $OSAQ_SL
# OSAQ_SIZE_LIMIT
{ORA_TYPE => ORA_NUMBER});
$osaq->bind_param(":BufferedOpt", $OSAQ_Buf
# OSAQ_Buffered
{ORA_TYPE => ORA_NUMBER}) ;
$osaq->bind_param_inout(":ImmEnqTimeMillis", \$millis
# immEnqMillis
{ ORA_TYPE => ORA_LONG }, SIZMILI) ;
$osaq->execute ;
# packets sent via Oracle Streams Advance Queue
For each execution (in a loop), I get no errors and the queue is
incremented (indicating receipt of a record), but in the database, my
binary :ImmPacket field is empty in the queue!
I have made sure that the variable I am passing ($packetCard) does
contain 207 bytes of binary information. Our dequeue procedure is, of
course, not working because the user data has nothing in it except the
length field. The Enqueue procedure is known to work via an application
C++ process and the dequeue java process is also working. The Perl
program is a test tool I need to get working for QC load test purposes.
I have searched all over the internet for someone who is doing something
similar and I see no method better than what I am using. Can anyone see
something obvious that I am doing wrong? Is this a known bug with
DBD::Oracle?
Any help would be appreciated.
Thanks,
Joe Orcino
**************************************************************************************
This e-mail is confidential, the property of NDS Ltd and intended for the
addressee only. Any dissemination, copying or distribution of this message or
any attachments by anyone other than the intended recipient is strictly
prohibited. If you have received this message in error, please immediately
notify the [EMAIL PROTECTED] and destroy the original message. Messages sent
to and from NDS may be monitored. NDS cannot guarantee any message delivery
method is secure or error-free. Information could be intercepted, corrupted,
lost, destroyed, arrive late or incomplete, or contain viruses. We do not
accept responsibility for any errors or omissions in this message and/or
attachment that arise as a result of transmission. You should carry out your
own virus checks before opening any attachment. Any views or opinions
presented are solely those of the author and do not necessarily represent those
of NDS.
To protect the environment please do not print this e-mail unless necessary.
NDS Limited Registered office: One Heathrow Boulevard, 286 Bath Road, West
Drayton, Middlesex, UB7 0DQ, United Kingdom. A company registered in England
and Wales Registered no. 3080780 VAT no. GB 603 8808 40-00
**************************************************************************************