Anand.K.S. wrote:
Hi,
This problem has been killing me for a while …
Script 1 and script 2 (mentioned below) are very much the same. However I
have hard coded the query
in script 2 whereas constructed in script 1.
Also script 1 is implement on an environment (which uses oracle
version 9and DBI
1.38) and script 2 on another environment (which uses oracle version
10gand
)
In script 1, the sql query is executed successfully, but in script 2 it
fails in execute() step..
The bind variable has the following values:
Tables => CHARGE NORMALISED_EVENT SUBTOTAL_RATING_VALUE
SUBTOTAL_RATING_DELTA NORMALISED_EVENT_ERROR
Hard coding bind variables goes trhough fine.. Is this a known bug or
am I
doing anything silly here.. Please could someone help me out?
Script 1:
========
$lsql = "SELECT NVL2(partition_name,
segment_name || ':' || partition_name,
segment_name)
FROM user_segments
WHERE segment_type IN ('TABLE', 'TABLE PARTITION') AND
segment_name NOT IN (";
}
# Create the necessary number of bind variable placeholders.
$lsql .= '?,' x scalar(@ltables);
# Remove the last ",".
chop $lsql;
# Order by BYTES if we are not splitting customer partitions out.
$lsql .= ") ORDER BY bytes DESC";
}
print ("\n SQL => $lsql");
# Execute the query and build an array of "other" table names.
my @lotherTables;
$lcsr = $zdb->prepare($lsql) ||
zDie("Could not prepare query at line " . __LINE__ . ": " .
$zdb->errstr);
$lcsr->execute(@ltables) ||
zDie("Could not execute query at line " . __LINE__ . ": " .
$zdb->errstr);
Script 2
=======
$lsql = "SELECT NVL2(partition_name,
segment_name || ':' || partition_name,
segment_name)
FROM user_segments
WHERE segment_type IN ('TABLE', 'TABLE PARTITION') AND
segment_name NOT IN
(SELECT object_name
FROM recyclebin bin) AND
segment_name NOT IN (?,?,?,?,?) ORDER BY bytes
DESC";#'CHARGE','NORMALISED_EVENT','SUBTOTAL_RATING_DELTA',
#'NORMALISED_EVENT_ERROR')
ORDER BY bytes DESC";
# Create the necessary number of bind variable placeholders.
#$lsql .= '?,' x scalar(@ltables);
# Remove the last ",".
#chop $lsql;
# Order by BYTES if we are not splitting customer partitions out.
#if (!$opt_scp) {
# $lsql .= ") ORDER BY bytes DESC";
#}
#else {
# $lsql .= ")";
#}
print ("\n sql => $lsql");
# Execute the query and build an array of "other" table names.
my @lotherTables;
$lcsr = $zdb->prepare($lsql) ||
zDie("Could not prepare query at line " . __LINE__ . ": " .
$zdb->errstr);
print ("\nTables => @ltables\n");
You haven't called $lcsr->bind_param for the parmeters!
$lcsr->execute(@ltables) ||
zDie("Could not execute query at line " . __LINE__ . ": " .
$zdb->errstr);
Thanks,
Anand.
Can I suggest that in future you should include the error messages you
see as you will get better assistance that way.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com