I'm encountering strange errors when using placeholders in an sql query, using an Oracle database. For example this query gives me
DBD::Oracle::db prepare failed: ORA-00907: missing right parenthesis ( +DBD ERROR: error possibly near <*> indicator at char 114 in ' sele +ct (FROM_TZ( CAST(sysdate as timestamp) , :timezone ) <*>AT TIME ZONE :timezone ) AS MY_RESULT from dual ...
This is the code I use:
use strict; use warnings; use DBI; my $sid='MYDB'; my $user='myuser'; my $pass='mypass'; my $dbh = DBI->connect("dbi:Oracle:$sid", $user, $pass, { AutoCommit => 0, RaiseError => 0, PrintErro +r => 1 } ); my $sth= $dbh->prepare(<<SQL) or die $dbh->errstr; select (FROM_TZ( CAST(sysdate as timestamp) , :TIMEZONE ) AT TIME ZONE :TIMEZONE ) AS MY_RESULT from dual SQL $sth->bind_param(':TIMEZONE', 'Europe/Berlin') or die $dbh->errstr;
When I replace ":TIMEZONE" with the string "'Europe/Berlin'", it works, so it is not an issue of the query itself.
In the real production code I use, the error is even more strange, as it tells me something about illegal relational operators.
Is this behaviour somewhere documented in DBD::Oracle? I couldn't find it.
Thanks for your help.
In reply to Strange errors with DBD::Oracle and placeholders by Skeeve
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |