On 03/06/15 14:38, William Bulley wrote:
According to "Martin J. Evans" <boh...@ntlworld.com> on Wed, 06/03/15 at 09:15:
So, when this fails, what is the value of $value.
I just ran it again. The value is 547.
Sounds ok but the error is "invalid string"
ORA-0911
You tried to execute a SQL statement that included a special character.
http://www.techonthenet.com/oracle/errors/ora00911.php
lists various causes.
Assuming you have RaiseError set, you can just put an eval
around the execute and if $@ is set, print out $value.
I don't. I have a print statement in front of the execute to
show my what I am passing to the execute() method.
I'm not sure I'd trust that - doesn't that mean you are expecting stdin and
stout to be in order. If you can easily do it I would stick an eval around it
and trap it that way. Also, if you trap it you can print the SQL using
http://search.cpan.org/~timb/DBI-1.633/DBI.pm#Statement
and the parameters using
http://search.cpan.org/~timb/DBI-1.633/DBI.pm#ParamValues
Strictly speaking you do not need to do this - ? is fine.
DBD::Oracle also supports named parameters e.g., ':myparam'
which only has an advantage if you want to use :myparam
more than once in the SQL.
The query is quite complex -- two SELECT statements connected
by a UNION statement -- and the "column = ?" syntax is used
twice. I changed the "?" to ":myparam" in both places and I
still get the error:
DBD::Oracle::st execute failed: called with 1 bind
variables when 0 are needed [for Statement...
Either because you omitted the value from execute
In this case, it was not omitted.
I would not bother changing from ? to named - I seriously doubt this is the
issue.
but more likely because you need to associate $value
with the NAMED parameter i.e., call bind_param.
That will be my next test, but I don't hold out much hope for
that working either (I've never had to do this in the past).
Tell us the column type of 'column' and the value of $value
when the original code fails. If this does not enlighten you,
reduce this to a small reproducible script and re-run with
ora_verbose set to 7. Paste the output somewhere we can view it.
The Oracle type for the column in question is NUMBER. I assumed
that any integer value would be compatible. The value is 547 for
the run that just failed.
Never heard of ora_verbose -- where is this to be set? Just in
my code somewhere, or on the DBI->connect() method, or where?
http://search.cpan.org/~pythian/DBD-Oracle-1.74/lib/DBD/Oracle.pm#ora_verbose
Can be set in the connect attributes.
Regards,
web...
If I were you I'd try and simply the original case down as much as possible but
getting a trace with ora_verbose might help identify the problem.
Martin