Hi,

We are *sporadically* getting the following error when accessing a table
with a single CLOB column (on DBI 1.607 and DBD::Oracle 1.22):

DBD ERROR: Can't match some parameters to LOB fields in the table, check
type and name

This is what we use to bind the data to the CLOB for our UPDATE statement:

$st->bind_param(3,'long string of text...',{TYPE => SQL_CLOB,ora_field =>
'last_output'});

I know that the above line of code is right, because it worked perfectly in
Perl 5.8, and because it works most of the time in Perl 5.10.  So since this
is sporadic, and it happens at random times (even if we do the same thing
over and over in a row from the beginning), there is no way to give you a
script to reproduce this.

However, I did do some digging into oci8.c to put some debugging messages to
narrow down exactly where this is happening, and I discovered that on the
rare occasion that this does crash, it is because the 'matched' flag on line
3540 is not getting set because the while loop it's in 'continue's (causing
it to leave the while loop) at line 3518 due to this conditional:

        if (SvCUR(phs->ora_field) != SvCUR(sv) || ibcmp(ora_field_name,
SvPV(sv,na), (I32)SvCUR(sv)))
            continue;

So I did a dump of all the players here, and discovered that the variable
'sv' is "last_output" (which is the name of our column) every time the
UPDATE succeeds.  For the times it crashes, however, sv is "112".  Isn't
that bizarre?

Does anyone have any insight into this?  It seems that %lob_cols_hv is
somehow getting corrupted...?

-- 
Eric Simon

Reply via email to