Curious.  Scott, what is your NLS_LANG and what is the character set
(SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET')?

Rich Jesse                           System/Database Administrator
[EMAIL PROTECTED]              Quad/Tech International, Sussex, WI USA

> -----Original Message-----
> From: Mark Dedlow [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, October 16, 2002 11:45 AM
> To: Tim Bunce; Scott
> Cc: [EMAIL PROTECTED]
> Subject: RE: Two Oracle parse calls for each execute
> 
> 
> Scott,
> 
> Something about your setup. Don't know what. Here's what I get
> on Oracle 8.1.7.1.
> 
> $c = $dbh->prepare('select 1 from dual', { ora_check_sql => 0});
> 
> for (1..10) { $c->execute }
> 
> SQL>select parse_calls, EXECUTIONS from v$sqlarea where 
> SQL_TEXT = 'select 1
> from dual'
> 
> PARSE_CALLS EXECUTIONS
> ----------- ----------
>           1         10
> 
> Mark
> 
> 
> > -----Original Message-----
> > From: Tim Bunce [mailto:[EMAIL PROTECTED]]
> > Sent: Wednesday, October 16, 2002 3:51 AM
> > To: Scott
> > Cc: [EMAIL PROTECTED]
> > Subject: Re: Two Oracle parse calls for each execute
> >
> >
> > On Tue, Oct 15, 2002 at 04:50:35PM -0700, Scott wrote:
> > > When I use DBD::Oracle 1.12 with DBI 1.30 (I also saw this on
> > > 1.06/1.15) I see two parse_calls for every execute on all selects.
> > > Update/insert/delete just have 1 parse/execute. I have a 
> simple test
> > > script.
> > >
> > > #!/usr/local/bin/perl -w
> > >
> > > use strict;
> > > use DBI;
> > >
> > > my $dbh = DBI->connect("dbi:Oracle:db", "user/pass");
> > > $dbh->trace(8);
> > > my $sth = $dbh->prepare("SELECT 1 FROM dual");
> >
> > Try:
> >
> >   my $sth = $dbh->prepare("SELECT 1 FROM dual", { 
> ora_check_sql => 0 });
> >
> > > Each time I run the script, the parse goes up by two and the
> > > executions by one. If I put a sleep before the execute, I 
> can see that
> > > prepare is doing one parse, and execute is doing both a 
> parse and an
> > > execute. I also tried just doing a selectall_arrayref and 
> it also has
> > > two parses. Any ideas why the extra parse?
> >
> > The prepare() method 'describes' the statement, triggering a parse.
> >
> > I believe the parse at execute time is fundamentally an Oracle bug
> > (and/or isn't a "full" parse). I'd be grateful if someone could ask
> > Oracle support about that.
> >
> > Meanwhile, ora_check_sql => 0 disables the parse-at-prepare.
> >
> > But there are down-sides to ora_check_sql=0 - it was the default
> > for a little while. Here's an old message that, although 
> being out of
> > date in various ways, describes some of the issues:
> >
> > http://www.bitmechanic.com/mail-archives/dbi-users/Apr1999/0538.html
> > (at the time ora_check_sql=0 was the default)
> >
> > In principle I don't have a fundamental objection to defering the
> > 'describe' until execute and thus defering detection of syntax
> > errors until the execute. I'd probably add a new $dbh attribute to
> > set the desired default behaviour so you don't have to add it to
> > each prepare() call.
> >
> > Tim.
> >
> 

Reply via email to