Re: DBD ODBC question - $dbh->{odbc_exec_direct}



Try
sth->finish()
after the
sth->execute()

i see you're catching the return values too, as in:

$rc = sth->execute()

are you actually using them for anyting? if not, i'd suggest not capturing them, because they're doing nothing but executing more instructions.



statements.  perhaps the stale sth


On Thu, 15 Dec 2005, Ryan Stille wrote:

I am working on a script that inserts records into a Progress database.
The script connects via DBI and odbc.

As I loop through each potential record to import, I query the database
for some info.  Occasionally I get errors like this:

DBD::ODBC::st execute failed: [OpenLink][ODBC][Progress Server]Stale
request handle. Request was not opened or has been closed. (1253)
(SQL-S1000)(DBD: st_execute/SQLExecute err=-1) at ./siimport.pl line
170.
DBD::ODBC::st fetchrow_array failed: (DBD: no select statement currently
executing err=-1) at ./siimport.pl line 171.
DBD::ODBC::st execute failed: [OpenLink][ODBC][Progress Server]Stale
request handle. Request was not opened or has been closed. (1253)
(SQL-S1000)(DBD: st_execute/SQLExecute err=-1) at ./siimport.pl line
170.
DBD::ODBC::st fetchrow_array failed: (DBD: no select statement currently
executing err=-1) at ./siimport.pl line 171.
DBD::ODBC::st execute failed: [OpenLink][ODBC][Progress Server]Stale
request handle. Request was not opened or has been closed. (1253)
(SQL-S1000)(DBD: st_execute/SQLExecute err=-1) at ./siimport.pl line
170.
DBD::ODBC::st fetchrow_array failed: (DBD: no select statement currently
executing err=-1) at ./siimport.pl line 171.

On some of the queries I was able to switch from:
$sth = $dbh->prepare($query);
$rc = $sth->execute();
($si_owner) = $sth->fetchrow_array();

To:
($si_owner) = $dbh->selectrow_array($query);

Which make the problem go away for some reason.  I was not able to
change all the queries to use selectrow_array of course.  But after
googling the "select statement currently executing" I came up with this:

$dbh->{odbc_exec_direct} = 1;

Which made the problem go away completely.  But I'd really like to
understand why.  I'd hate to see this problem come up again when I put
the script into production.  The blurb from the documentation was no
help:

odbc_exec_direct -
Force DBD::ODBC to use SQLExecDirect instead of SQLPrepare() then
SQLExecute. There are drivers that only support SQLExecDirect and the
DBD::ODBC do() override doesn't allow returning result sets. Therefore,
the way to do this now is to set the attributed odbc_exec_direct. There
are currently two ways to get this: $dbh->prepare($sql, {
odbc_exec_direct => 1}); and $dbh->{odbc_exec_direct} = 1; When
$dbh->prepare() is called with the attribute "ExecDirect" set to a
non-zero value dbd_st_prepare do NOT call SQLPrepare, but set the sth
flag odbc_exec_direct to 1.


Thanks for any help. -Ryan


-- LLL OOOO UUU UUU IIII SSSSS LLL OOO OOO UUU UUU IIII SSSS LLL OOO OOO UUU UUU IIII SSS LLL OOO OOO UUU UUU IIII SSS LLL OOOO OOOO UUU UUU IIII SSSSS LLL OOOO OOOO UUU UUU IIII SSSSS LLL OOOO OOOO UUUUUUUUUUU IIII SSSSS LLL OOOO OOOO UUUUUUUUU IIII SSSS LLLL OOOOOOOO UUUUU IIII SSSSSS LLLLLLLL OOOOOO UUU IIII SSSSS LLLLLLLL .



Relevant Pages

  • Re: W2K3 IIS 6.0 ASP.NET Requests Per Second Limits?
    ... >> The way I understand async programming is if u need to do other ... >> request to webservice nothing more can be done until the result ... > The thread executing code literally calls into Function1, ... > the act of sending back the response using data that has been ...
    (microsoft.public.inetserver.iis)
  • RE: DBD ODBC question - $dbh->{odbc_exec_direct}
    ... I am working on a script that inserts records into a Progress database. ... Request was not opened or has been closed. ... Force DBD::ODBC to use SQLExecDirect instead of SQLPrepare() then ...
    (perl.dbi.users)
  • Re: Postback in Firefox and IE
    ... Does having a querystring makes a request a new request each time it is ... >> time a page is posted back to the server on firefox and netscape ... >> navigator. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Need to break a while..
    ... finished the default behavior is for PHP to abort the script. ... I solved the problem with an <iframe> and a small file, ... No, once you execute a request, you cannot "inject" additional values ... to the executing script on the fly. ...
    (comp.lang.php)
  • Re: How to send a request to JSP from a standalone java program
    ... > I have to send a request to JSP with some key value pairs which is ... > executing in a Web server. ...
    (comp.lang.java)