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");
$sth->execute();


SQL> SELECT parse_calls, executions FROM v$sqlarea WHERE sql_text = 'SELECT 1 FROM 
dual';

PARSE_CALLS EXECUTIONS
----------- ----------
  16       8

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?

Setup:
perl 5.6.1
Oracle client 8.1.7.0.0 on Linux
Oracle server 8.1.7.3.0 on Sparc Solaris

Here is the trace
    DBI::db=HASH(0x817c820) trace level set to 8 in DBI 1.30-nothread
    -> prepare for DBD::Oracle::db (DBI::db=HASH(0x82044ac)~0x817c820 'SELECT 1 FROM 
dual')
    dbih_setup_handle(DBI::st=HASH(0x8175cc0)=>DBI::st=HASH(0x8175d08), 
DBD::Oracle::st, 8175ccc, Null!)
    dbih_make_com(DBI::db=HASH(0x817c820), DBD::Oracle::st, 208) thr#(nil)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), Err, DBI::db=HASH(0x817c820)) 
SCALAR(0x817c67c) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), State, DBI::db=HASH(0x817c820)) 
SCALAR(0x81a7e14) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), Errstr, DBI::db=HASH(0x817c820)) 
SCALAR(0x817c664) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), Debug, DBI::db=HASH(0x817c820)) 8 
(already defined)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), FetchHashKeyName, 
DBI::db=HASH(0x817c820)) 'NAME' (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x8175d08), HandleError, DBI::db=HASH(0x817c820)) 
undef (not defined)
OCIHandleAlloc(0x820f120,0x8236770,OCI_HTYPE_STMT,0,(nil))=SUCCESS
OCIStmtPrepare(0x8235030,0x821e2dc,'SELECT 1 FROM dual',18,1,0)=SUCCESS
OCIAttrGet(0x8235030,OCI_HTYPE_STMT,0x8236774,(nil),24,0x821e2dc)=SUCCESS
    dbd_st_prepare'd sql SELECT
    dbd_describe SELECT (EXPLICIT, lb 80)...
OCIStmtExecute(0x821e0b4,0x8235030,0x821e2dc,0,0,(nil),(nil),16)=SUCCESS
OCIAttrGet(0x8235030,OCI_HTYPE_STMT,0xbffff14c,(nil),18,0x821e2dc)=SUCCESS
OCIParamGet(0x8235030,4,0x821e2dc,0x8236650,1)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x8236666,(nil),2,0x821e2dc)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x8236664,(nil),1,0x821e2dc)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x8236668,(nil),5,0x821e2dc)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x823666a,(nil),6,0x821e2dc)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x823666b,(nil),7,0x821e2dc)=SUCCESS
OCIAttrGet(0x8234778,OCI_DTYPE_PARAM,0x8236678,0xbffff148,4,0x821e2dc)=SUCCESS
    fbh 1: '1'  NULLable, otype   2->  5, dbsize 2/134, p0.s0
OCIAttrSet(0x8235030,OCI_HTYPE_STMT,0xbffff144,4,11,0x821e2dc)=SUCCESS
OCIDefineByPos(0x8235030,0x8236654,0x821e2dc,1,0x82367c8,134,5,0x8236e48,0x8236858,0x8236868,0)=SUCCESS
    dbd_describe'd 1 columns (row bytes: 2 max, 4 est avg, cache: 858)
    <- prepare= DBI::st=HASH(0x8175cc0) at ./oracle_parse.pl line 8
    -> execute for DBD::Oracle::st (DBI::st=HASH(0x8175cc0)~0x8175d08)
    dbd_st_execute SELECT (out0, lob0)...
OCIStmtExecute(0x821e0b4,0x8235030,0x821e2dc,0,0,(nil),(nil),0)=SUCCESS
OCIAttrGet(0x8235030,OCI_HTYPE_STMT,0xbffff3d6,(nil),10,0x821e2dc)=SUCCESS
    dbd_st_execute SELECT returned (SUCCESS, rpc0, fn4, out0)
    <- execute= '0E0' at ./oracle_parse.pl line 9
    -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x8175d08)~INNER)
OCIStmtFetch(0x8235030,0x821e2dc,0,2,0)=SUCCESS
OCIHandleFree(0x8235030,OCI_HTYPE_STMT)=SUCCESS
    <- DESTROY= undef
    -> DESTROY for DBD::Oracle::db (DBI::db=HASH(0x817c820)~INNER)
OCISessionEnd(0x821e0b4,0x821e2dc,0x8235494,0)=SUCCESS
OCIServerDetach(0x821e120,0x821e2dc,0)=SUCCESS
OCIHandleFree(0x8235494,OCI_HTYPE_SESSION)=SUCCESS
OCIHandleFree(0x821e120,OCI_HTYPE_SERVER)=SUCCESS
OCIHandleFree(0x821e0b4,OCI_HTYPE_SVCCTX)=SUCCESS
OCIHandleFree(0x821e2dc,OCI_HTYPE_ERROR)=SUCCESS
    <- DESTROY= undef

Reply via email to