Jenda,
It could be a bug. Can you wrap up a quick test case and I'll trace it
through?
Regards,
Jeff
>
> I'm calling some stored procedures using DBI 1.32, DBD::ODBC 1.07 and
> Perl v5.8.0 (ActivePerl build 805) running on Win2kServer SP4 using
> MS SQL 2000.
>
> Am I supposed to initialize the variables I pass to
> bind_param_inout()?
>
> I'm using code like this to prepare and call the stored procedures
> and fetch the OUTPUT parameters:
>
> sub prepare_sps {
> $sp{GetLocationInfo_p}
> = $db->prepare('EXEC dbo.GetLocationInfo '.
> join(', ',('?') x 5));
> # parameters 2-5 are OUTPUT!
> {
> my ($JobCity, $JobState, $JobCountry, $JobZIP)
> = ( " "x 50, " "x 50, " ", " "x 5);
> my $sp = $sp{GetLocationInfo_p};
> $sp->bind_param_inout(2, \$JobCity, 50,
> DBI::SQL_VARCHAR);
> $sp->bind_param_inout(3, \$JobState, 50,
> DBI::SQL_VARCHAR);
> $sp->bind_param_inout(4, \$JobCountry, 2,
> DBI::SQL_CHAR);
> $sp->bind_param_inout(5, \$JobZIP, 5, DBI::SQL_CHAR);
>
> $sp{GetLocationInfo} = sub {
> $sp->bind_param(1, $_[0]);
> $sp->execute();
> $_[1] = $JobCity;
> $_[2] = $JobState;
> $_[3] = $JobCountry;
> $_[4] = $JobZIP;
> s/^\s+//,s/\s+$// for ($_[1..4]);
> }
> };
> ...
> }
> ...
>
> $sp{GetLocationInfo}->($jobLocationId, $JobCity, $JobState,
> $JobCountry, $JobZIP);
>
> The stored proc looks like this:
>
> CREATE PROCEDURE dbo.GetMonsterLocationInfo(
> @LocationID Int,
> @City varchar(50) OUTPUT,
> @State varchar(50) OUTPUT,
> @Country char(2) OUTPUT,
> @Zip char(5) OUTPUT
> ) AS
> BEGIN
> SELECT @Zip = ZipCode, @State = State, @Country =
> Country, @City =
> MappedCity
> FROM dbo.LocationLookup WITH (NOLOCK)
> WHERE ID = @LocationID
> END
>
> The problem is that if I do not initialize the $JobXxxx variables
> with those spaces:
>
> my ($JobCity, $JobState, $JobCountry, $JobZIP)
> = ( " "x 50, " "x 50, " ", " "x 5);
>
> I only get the first letters of the values. Once I do initialize the
> variables I do get the right and complete values even in a loop, even
> if the value in a later iteration is longer than the one in a
> previous.
> I do get the same incorrect results if the variables are undef or "".
>
> Why is that? Is this something I missed in the docs? Or is it a bug
> in DBD::ODBC? Or ...?
>
> Thanks, Jenda
>
> == [EMAIL PROTECTED] == http://Jenda.Krynicky.cz ==
> I wonder why the whole chemistry industry ignores
> computer bugs. We all would gladly pay big bucks
> for a functional insecticide.
>