If the query has where clause 

where division_id = :1 and division_order_id = :2

execution tooks way too long taking into account that division_id (VARCHAR2) + 
division_order_id (VARCHAR2) is the primary key in this table.


A simple addition forcing division_order_id to be VARCHAR, dramatically 
improves performance

where division_id = :1 and division_order_id = '' || :2


So, the code obviously binds the second parameter incorrectly.

Thank you,

Igor


-----Original Message-----
From: Tim Bunce [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, December 21, 2005 10:23 AM
To: Igor Korolev
Cc: dbi-users@perl.org; [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Bug in Oracle driver ?

On Wed, Dec 21, 2005 at 09:29:18AM -0600, Igor Korolev wrote:
>    Wayne, Tim,
> 
>    Any ideas why DBD::Oracle incorrectly binds even non-numeric value 
> '1130979589-6919-090637' from the
>    below example ?

I don't understand the question.

Tim.

>    Thank you,
> 
>    Igor
> 
>    _____________________________________________
>    From:   Igor Korolev
>    Sent:   Thursday, December 15, 2005 4:28 PM
>    To:     'dbi-users@perl.org'
>    Subject:        RE: Bug in Oracle driver ?
> 
>    Hello,
> 
>    It looks like the Oracle driver incorrectly binds VARCHAR2 variables in 
> case a number is passed from
>    perl.
> 
>    Here is an example.   This table has a primary key on division_id + 
> division_order_id, so such selects
>    should run very quickly (and they do run very quickly from sqlplus or 
> toad).
> 
>    However, if I execute this using selectrow_array method of DBI.pm
> 
>    my $sql = 'select ' . join(',',@$sum_fields) . ' from ' . $table .
>                     qq[ where division_id = :1 and division_order_id = :2];
> 
>    It takes up to 1 second per select:
> 
>    Order [1], select took: [0.730479001998901]
>    Order [2], select took: [0.441529989242554]
>    Order [1130979589-6919-090637], select took: [0.462771892547607]
>    Order [3], select took: [0.424475193023682]
>    Order [947647153], select took: [0.513856172561646]
>    Order [4], select took: [0.49094295501709]
>    Order [6], select took: [0.523995161056519]
>    Order [7], select took: [0.558786153793335]
>    Order [8], select took: [0.452331066131592]
>    Order [131635406], select took: [0.451704978942871]
> 
>    However, a simple addition forcing VARCHAR2, dramatically improves 
> performance
> 
>    my $sql = 'select ' . join(',',@$sum_fields) . ' from ' . $table .
>                    qq[ 
];
> 
>    Order [1], select took: [0.00937604904174805]
>    Order [2], select took: [0.00504183769226074]
>    Order [1130979589-6919-090637], select took: [0.0115630626678467]
>    Order [3], select took: [0.00729489326477051]
>    Order [947647153], select took: [0.00545406341552734]
>    Order [4], select took: [0.00602984428405762]
>    Order [6], select took: [0.00556111335754395]
>    Order [7], select took: [0.00576210021972656]
>    Order [8], select took: [0.00520086288452148]
>    Order [131635406], select took: [0.00546598434448242]
> 
>    Thank you,
> 
>    Igor

Reply via email to