Re: Rows returned are out of sync with the request.
- From: rvtol+news@xxxxxxxxxxxx (Dr.Ruud)
- Date: Thu, 24 Aug 2006 03:55:31 +0200
Stephen Carville schreef:
Dr.Ruud:
The "tranid" and "certno" in your "where" don't have table
identifiers. If you assume that the result is one record, check for
more.
I didn't know that dropping the table ids could make a difference.
I'll try adding them. Thanks.
They shouldn't make a difference, unless the names are (or once become)
ambiguous.
These are the subs where I setup and make the calls to DBI.
Don't forget the
use warnings ;
use strict ;
# this gets the status by certno.
# connection handle is already open
use sql;
{ my ($sth);
sub getstatus_by_certno {
my ($certno) = @_;
my ($status,$line,$timeout);
my (%results);
my $SCRIPT = "select a.statid, b.webstatdesc, a.pendid,
c.penddesc, a.certno, to_char(sysdate,'MM-DD-YYYY hh24:mi:ss')
from viewrequestmasall a, requeststatusparm b, pendingreasonparm c
where a.statid = b.statid
and a.pendid = c.pendid (+)
and tranid = 1
and certno = ?";
unless ($sth) {
Can $sth ever be already defined here?
$timeout = log_get_timeout();
$sth = edi_prepare_sql($SCRIPT,$timeout);
}
$timeout = log_get_timeout();
%results = edi_run_select($sth,$timeout,$certno);
undef $sth if ($sth);
The $sths get undefined.
$line = edi_get_last_results() . "\n";
log_db_addlines($line);
# get the staid and associated message
return evaluate_status(%results);
}
}
# from sql.pm
use DBI;
use Sys::SigAction qw (set_sig_handler);
# prepare for execution
# return sth on success or 0/undef on error
#
sub edi_prepare_sql {
my($script,$timeout) = @_;
my ($sth);
$edi_lastresult = "";
$timeout = $EDI_TIMEOUT unless ($timeout);
unless ($edi_dbh) {
$edi_lastresult = "connection to DB lost";
return 0;
}
eval {
my $h = set_sig_handler('ALRM',
sub {$sth = 0; die;},
{ mask=>[qw(INT ALRM)],safe =>
$edi_safe_signal } );
# set alarm
alarm($timeout);
# prepare the script
$sth = $edi_dbh->prepare($script);
# reset alarm
alarm(0);
};
# reset alarm JIC
alarm(0);
if ($@) {
$edi_lastresult = DBI::errstr;
}
unless ($sth) {
$edi_lastresult = "Prepared timed out in $timeout seconds"
unless ($edi_lastresult);
}
Maybe make that something like:
$sth or $edi_lastresult .= "=> prepare() timed out in $timeout
seconds.\n" ;
return $sth;
}
sub edi_run_select {
my($sth,$timeout,@bind_vars) = @_;
my ($rv,$val,$cntr,$row);
my (%tbl);
$tbl{0}[0] = "ERROR";
$tbl{1}[0] = "noservice";
$edi_lastresult = "";
$timeout = $EDI_TIMEOUT unless ($timeout);
# if handle is not there
unless ($sth) {
$edi_lastresult = "cannot execute (connection lost?)";
return %tbl;
}
eval {
my $h = set_sig_handler('ALRM',
sub {$rv = 0; die;},
{ mask=>[qw(INT ALRM)],safe =>
$edi_safe_signal } );
# set alarm
alarm($timeout);
# execute the script
$rv = $sth->execute(@bind_vars);
# reset alarm on success
alarm(0);
};
# reset alarm JIC
alarm(0);
# if execute failed
if ($@) {
$edi_lastresult = DBI::errstr;
return %tbl;
}
unless ($rv) {
$edi_lastresult = ($edi_lastresult ||"Select timed out in
$timeout seconds:");
Why the || here? Maybe change that to:
$edi_lastresult .= "=> execute() timed out in $timeout
seconds.\n" ;
return %tbl;
}
$cntr = 0;
# no headers yet...
$tbl{0}[0] = "SUCCESS";
$tbl{1} = ();
while ($row = $sth->fetchrow_arrayref) {
$cntr++;
foreach (@$row) {
$val = (trim($_) || "");
push @{$tbl{$cntr}},$val;
$edi_lastresult .= ($val || "undef") . "\t";
}
# sorta tabular format
chop $edi_lastresult;
$edi_lastresult .= "\n";
}
# if no rows -- no rows returned is not always an error
unless ($cntr) {
$edi_lastresult = "no rows returned";
$tbl{1}[0] = "no rows";
}
return %tbl;
}
--
Affijn, Ruud
"Gewoon is een tijger."
.
- Follow-Ups:
- Re: Rows returned are out of sync with the request.
- From: Stephen Carville
- Re: Rows returned are out of sync with the request.
- References:
- Rows returned are out of sync with the request.
- From: Stephen Carville
- Re: Rows returned are out of sync with the request.
- From: Dr.Ruud
- Re: Rows returned are out of sync with the request.
- From: Stephen Carville
- Rows returned are out of sync with the request.
- Prev by Date: RE: Help with my perl script
- Next by Date: Re: Rows returned are out of sync with the request.
- Previous by thread: Re: Rows returned are out of sync with the request.
- Next by thread: Re: Rows returned are out of sync with the request.
- Index(es):
Relevant Pages
|
|