> Date: Tue, 9 Mar 2010 08:42:28 +0000
> From: martin.ev...@easysoft.com
> To: byter...@hotmail.com
> CC: john...@pharmacy.arizona.edu; dbi-users@perl.org
> Subject: Re: DBI bind_param_inout question
>
> John Scoles wrote:
> > Silly me you do need it so rare that I use it day to day.
> >
> > In my case I usualy use it like this
> >
> > $c->bind_param_inout(":p_new_id",\$p_new_id,SQL_DECIMAL);
> >
>
ouch bug in my code 'seems SQL_DECIMAL is 3 so I guess I am in fact doing this
$c->bind_param_inout(":p_new_id",\$p_new_id,3);
most likey getting away with as in Oracle is it 3 bytes which should hold most
of the numbersin the code I wuse it for.
my guess qould be to use 38 or even more.
In DBD::Oracle the value is always in bytes never characters.
> I think you mean
>
> $c->bind_param_inout(":p_new_id",\$p_new_id,$length,SQL_DECIMAL);
>
> as the $length is compulsory but the bind type (SQL_DECIMAL) is optional.
>
> >
> > or more properly
> >
> > $c->bind_param_inout(":p_new_id",\$p_new_id,ORA_NUMBER);
> >
> $c->bind_param_inout(":p_new_id",\$p_new_id,$length, ORA_NUMBER)
>
> >
> > basiclly not to get into the low down stuff in OCI we have to tell
> > OCIBindByName how many bytes to expect for this bind.
> >
>
> As it does in DBD::ODBC. If for instances, you said $length was 10 then
> the output bound parameter was 20 bytes in length you'd get a data right
> truncation error in DBD::ODBC.
>
> There is however one possible area of ambiguity with respect to bytes or
> characters (within a DBD). DBD::ODBC counts the $length as characters
> not bytes as how it is eventually encoded in Perl should not matter. So
> if you specify $length=10 and the output parameter is a wide (MS's term
> in ODBC for a unicode character that occupies 2 bytes) character type
> DBD::ODBC allocates twice as much plus 2 (for the terminating nul chr)
> bytes then encodes it in UTF-8 for Perl - so you'd get at most 10 chrs.
> In this case if the output parameter was 11 chrs in length you'd get a
> data right truncation error again.
>
> I'm not sure what DBD::Oracle does wrt to chrs or bytes.
>
> > from the OCI doc
> >
> > 'The size in bytes of the data value pointed to by dvoid pointer valuepThe
> > size in bytes of the data value pointed to by dvoid pointer valuep"
> >
> > Hope this helps.
> >
> > cheers
>
> Martin
> --
> Martin J. Evans
> Easysoft Limited
> http://www.easysoft.com
>
> >> CC: dbi-users@perl.org
> >> From: john...@pharmacy.arizona.edu
> >> To: byter...@hotmail.com
> >> Subject: Re: DBI bind_param_inout question
> >> Date: Mon, 8 Mar 2010 17:11:34 -0700
> >>
> >>
> >> On Mar 8, 2010, at 4:52 PM, John Scoles wrote:
> >>
> >>> depends on the DBD::Driver implimentation.
> >>>
> >>>
> >>>
> >>> In DBD::Oracle the maxlenth usually means nothing. Not sure about
> >>> other drivers.
> >>>
> >>>
> >>>
> >>> which one are you using?
> >>>
> >> I'm using oracle. I get an error if I don't include it, but from what
> >> you're saying it's just a dummy value, it just has to have a value?
> >>
> >> --
> >> Bruce Johnson
> >> University of Arizona
> >> College of Pharmacy
> >> Information Technology Group
> >>
> >> Institutions do not have opinions, merely customs
> >>
> >>
> >
> > _________________________________________________________________
> > Take your contacts everywhere
> > http://go.microsoft.com/?linkid=9712959
>
>
_________________________________________________________________
Live connected with Messenger on your phone
http://go.microsoft.com/?linkid=9712958