Thanks for the suggestions so far. Unfortunately I don't have much influence over the corporate AIX/Perl environment, so getting to try latest versions might take some time.
Meanwhile I have used the DBI trace option on a few different code variations:
1. Execute with variable names as parameters
2. Bind each variable then execute
3. Execute with hard coded integer values as parameters
4. Execute with eval{} of integer variables as parameters
The four code snippets and the resulting DBI trace are reproduced below.
my $row_count = $upd_idx1->execute($uuid, $doc_name, $doc_off, $doc_le
+n, $comp_off, $comp_len);
-> execute for DBD::DB2::st (DBI::st=HASH(0x3036c894)~0x3036c75c '
+68c51749-38a3-4f11-910c-f854c2973ce1' '91FAAA' Math::BigInt=HASH(0x30
+36c4d4) Math::BigInt=HASH(0x3036ca14
) Math::BigInt=HASH(0x3036c7ec) Math::BigInt=HASH(0x3036c51c)) thr#300
+2ee58
bind :p1 <== '68c51749-38a3-4f11-910c-f854c2973ce1' (attribs: <no attr
+ibs>)
bind :p1: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=1, S
+CALE=0, Maxlen=0, (null)
bind :p2 <== '91FAAA' (attribs: <no attribs>)
bind :p2: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=12,
+SCALE=0, Maxlen=0, (null)
bind :p3 <== '0' (attribs: <no attribs>)
bind :p3: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p4 <== '17555' (attribs: <no attribs>)
bind :p4: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p5 <== '0' (attribs: <no attribs>)
bind :p5: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p6 <== '86861' (attribs: <no attribs>)
bind :p6: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
!! ERROR: '-99999' '[IBM][CLI Driver] CLI0112E Error in assignmen
+t. SQLSTATE=22005' (err#1)
--------------------------------------------------
$upd_idx1->bind_param(1, $uuid) or die "Bind failed f
+or UUID: $dbh->errstr";
$upd_idx1->bind_param(2, $doc_name) or die "Bind failed f
+or doc_name: $dbh->errstr";
$upd_idx1->bind_param(3, $doc_off, SQL_INTEGER) or die "Bind failed f
+or doc_off: $dbh->errstr";
$upd_idx1->bind_param(4, $doc_len, SQL_INTEGER) or die "Bind failed f
+or doc_len: $dbh->errstr";
$upd_idx1->bind_param(5, $comp_off, SQL_INTEGER) or die "Bind failed f
+or comp_off: $dbh->errstr";
$upd_idx1->bind_param(6, $comp_len, SQL_INTEGER) or die "Bind failed f
+or comp_len: $dbh->errstr";
my $row_count = $upd_idx1->execute();
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @3 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 1 'ad2c80e3-9f6c-43b9-a98a-1a6a8257c67a') thr#3002ee58
bind :p1 <== 'ad2c80e3-9f6c-43b9-a98a-1a6a8257c67a' (attribs: <no attr
+ibs>)
bind :p1: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=1, S
+CALE=0, Maxlen=0, (null)
<- bind_param= 1
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @3 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 2 '91FAAA') thr#3002ee58
bind :p2 <== '91FAAA' (attribs: <no attribs>)
bind :p2: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=12,
+SCALE=0, Maxlen=0, (null)
<- bind_param= 1
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @4 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 3 Math::BigInt=HASH(0x3036ac98) 4) thr#3002ee58
bind :p3 <== '0' (attribs: <no attribs>)
bind :p3: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
<- bind_param= 1
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @4 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 4 Math::BigInt=HASH(0x3036cad4) 4) thr#3002ee58
bind :p4 <== '17555' (attribs: <no attribs>)
bind :p4: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
<- bind_param= 1
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @4 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 5 Math::BigInt=HASH(0x3036c5ac) 4) thr#3002ee58
bind :p5 <== '0' (attribs: <no attribs>)
bind :p5: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
<- bind_param= 1
>> bind_param DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @4 g0 ima1
+ pid#2338852)
-> bind_param for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c92
+4 6 Math::BigInt=HASH(0x3036c684) 4) thr#3002ee58
bind :p6 <== '86861' (attribs: <no attribs>)
bind :p6: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
<- bind_param= 1
>> execute DISPATCH (DBI::st=HASH(0x3036ca5c) rc1/1 @1 g0 ima1
+041 pid#2338852)
-> execute for DBD::DB2::st (DBI::st=HASH(0x3036ca5c)~0x3036c924)
+thr#3002ee58
!! ERROR: '-99999' '[IBM][CLI Driver] CLI0112E Error in assignmen
+t. SQLSTATE=22005' (err#1)
--------------------------------------------------
my $row_count = $upd_idx1->execute($uuid, $doc_name, 0, 17555, 0, 8686
+1);
-> execute for DBD::DB2::st (DBI::st=HASH(0x3036c81c)~0x3036c6e4 '
+076de5c1-f082-4994-85fd-132a9a098737' '91FAAA' 0 17555 0 86861) thr#3
+002ee58
bind :p1 <== '076de5c1-f082-4994-85fd-132a9a098737' (attribs: <no attr
+ibs>)
bind :p1: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=1, S
+CALE=0, Maxlen=0, (null)
bind :p2 <== '91FAAA' (attribs: <no attribs>)
bind :p2: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=12,
+SCALE=0, Maxlen=0, (null)
bind :p3 <== '0' (attribs: <no attribs>)
bind :p3: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p4 <== '17555' (attribs: <no attribs>)
bind :p4: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p5 <== '0' (attribs: <no attribs>)
bind :p5: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p6 <== '86861' (attribs: <no attribs>)
bind :p6: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
<- execute= 1
--------------------------------------------------
my $row_count = $upd_idx1->execute($uuid, $doc_name, eval{$doc_off}, e
+val{$doc_len}, eval{$comp_off}, eval{$comp_len});
-> execute for DBD::DB2::st (DBI::st=HASH(0x3036c7ec)~0x3036c6b4 '
+a2b0940e-9120-43b5-bfef-a5986a4e236e' '91FAAA' Math::BigInt=HASH(0x30
+36aa28) Math::BigInt=HASH(0x3036c864
) Math::BigInt=HASH(0x3036c33c) Math::BigInt=HASH(0x3036c414)) thr#300
+2ee58
bind :p1 <== 'a2b0940e-9120-43b5-bfef-a5986a4e236e' (attribs: <no attr
+ibs>)
bind :p1: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=1, S
+CALE=0, Maxlen=0, (null)
bind :p2 <== '91FAAA' (attribs: <no attribs>)
bind :p2: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=12,
+SCALE=0, Maxlen=0, (null)
bind :p3 <== '0' (attribs: <no attribs>)
bind :p3: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p4 <== '17555' (attribs: <no attribs>)
bind :p4: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p5 <== '0' (attribs: <no attribs>)
bind :p5: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
bind :p6 <== '86861' (attribs: <no attribs>)
bind :p6: db2_param_type=1, db2_c_type=1, db2_type=0, PRECISION=4, S
+CALE=0, Maxlen=0, (null)
!! ERROR: '-99999' '[IBM][CLI Driver] CLI0112E Error in assignmen
+t. SQLSTATE=22005' (err#1)
As you can see the only variation which "works" is the one with integer values hard coded, which obviously isn't a solution.
This despite the fact that all methods see the trace of
db2_param_type=1, db2_c_type=1, db2_type=0
If anyone can read anything of significance from the trace I would be much obliged. |