> On Feb 20, 2015, at 1:01 PM, Larry W. Virden <lvir...@gmail.com> wrote:
> 
>    $oraProdDBH->do
>     (
>     "UPDATE CSI_HR SET FIRST_NAME=$oraProdDBH->quote($first_name)  , 
> MIDDLE_NAME
> =$oraProdDBH->quote($middle_name) , LAST_NAME=$oraProdDBH->quote($last_name) 
> , R
> EC_MOD_DATE=SYSDATE  WHERE ALT_EMP_NO = $alt_emp_no"

As the error indicates, perl is just doing substitution and sticking in a hash 
reference "DBI:db=HASH(0x221d94)->quote(Neil)” instead of what you want which 
is the value of the method.

You have to assign the value of the quote() method to a variable to do 
substitution that way:

my $qfn=$oraProdDBH->quote($first_name);
my $qmn=$oraProdDBH->quote($middle_name);
my $qln=$oraProdDBH->quote($last_name);
 $oraProdDBH->do
    (
    "UPDATE CSI_HR SET FIRST_NAME=$qfn  , MIDDLE_NAME
=$qmn , LAST_NAME=$qln , REC_MOD_DATE=SYSDATE  WHERE ALT_EMP_NO = $alt_emp_no"
    ) or die "Failed to update csi_hr; $DBI::errstr\n";

Alternatively you can use parameter substitution:

my $cursor=$oraProdDBH->prepare("UPDATE CSI_HR SET FIRST_NAME=? , MIDDLE_NAME
=? , LAST_NAME=? , REC_MOD_DATE=SYSDATE  WHERE ALT_EMP_NO = ?”);

$cursor->execute($first_name, $middle_name, $last_name, $alt_emp_no);

Which (IIRC) uses the $oraProdDBH->quote() method behind the scenes to escape 
things.

Which accomplishes the same thing as the ->do statement above, but using 
parameters instead, which makes the statement marginally faster to execute in 
oracle, and a lot faster if you’re doing a lot of ‘em because the statement 
plan gets calculated only once, then cached, like all queries with parameters.

-- 
Bruce Johnson
University of Arizona
College of Pharmacy
Information Technology Group

Institutions do not have opinions, merely customs

Reply via email to