adt*_*ewa 2 oracle perl prepared-statement
我想使用perl DBI(版本5.16.3)的预准备语句来更新Oracle数据库表中的行.
my $query = 'update THE_TABLE set (COLUMN_ONE = ?, COLUMN_TWO = ?,
MODIFY_DATE = SYSDATE) where ID = ?';
my $statement_update = $db_handle->prepare($query) or die 'DB Error: ' . $db_handle->errstr;
$statement_update->execute(1, 1, '123456789') or die 'DB Error: ' . $statement_update->errstr;
Run Code Online (Sandbox Code Playgroud)
执行时,perl DBI在语句中添加一个特殊的<*>符号组,这会导致错误:
DBD::Oracle::st execute failed: ORA-00907: missing right parenthesis (DBD ERROR: error possibly near <*> indicator at char 31 in 'update THE_TABLE set (COLUMN_ONE <*>= :p1, COLUMN_TWO = :p2, MODIFY_DATE = SYSDATE) where ID = :p3') [for Statement "update THE_TABLE set (COLUMN_ONE = ?, COLUMN_TWO = ?, MODIFY_DATE = SYSDATE) where ID = ?" with ParamValues: :p1=1, :p2=1, :p3='123456789'] at a_perl_script.pl line ...
使用symbolhound,我可以找到这个页面,看起来其他人遇到了同样的事情.看起来它是随机的perl DBI放置<*>符号.
我怎样才能调整perl DBI以正确地发表这个声明?
它不会将该符号插入到执行的查询中.它只是错误消息中的一个标记,表示语法错误的位置为您提供方便,更容易找到该位置.
要消除错误,请从查询中删除括号.
...
my $query = 'update THE_TABLE set COLUMN_ONE = ?, COLUMN_TWO = ?,
MODIFY_DATE = SYSDATE where ID = ?';
...
Run Code Online (Sandbox Code Playgroud)
perl DBI正在向语句添加一个特殊的<*>符号组,这会导致错误
你害怕这完全错了.首先,它不是添加符号的Perl,而是Oracle查询编译器.其次,这些符号不会导致错误,它们会向您显示Oracle认为错误的位置.
仔细查看错误消息.它说:
DBD错误:错误可能接近<*>指示符
"指标"这个词是你的线索.它已添加到"指示"错误的位置.
正如您已经被告知的那样,解决方案是从查询中删除不必要的括号.
精确度和准确度是成为专业程序员的重要部分.您需要习惯于阅读和理解错误消息 - 而不仅仅是跳过想到的第一个可能的解释.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |