如何删除从perl读取sql文件时附加的特殊字符

时间:2013-07-09 19:21:57

标签: perl perl-module

我正在尝试使用perl从sql文件执行查询,但是当我尝试时,我看到一些特殊的char被添加到查询之间或结尾处。我不知道如何解决这个问题。

my $dbh = DBI->connect("DBI:Oracle:$dbconnectstring","$user","$password");
open FH, "< Queries.sql"; 
$sth = $dbh->prepare(<FH>)     or die ("Can't prepare  $sqlStatement");
$sth->execute($name,$id)      or die ("Can't execute $sqlStatement");

sql文件中的SQL语句:

delete from Employee where name = ? and id = ? ;

以下是我得到的错误:

  

DBD :: Oracle :: st执行失败:ORA-00911:无效字符(DBD   错误:错误可能接近&lt; &gt; “删除自”中字符86处的指示符   员工名称=:p1和id =:p2&lt; &gt;;')[for Statement“delete   来自员工姓名=?和id =?;“与ParamValues:   :p1 ='3453',:p2 ='4545']在ExecuteDelete.pl第32行,第1行。

     

无法在ExecuteDelete.pl第32行,第1行

执行

请在这里帮助我。我不确定我在这里做错了什么。

我已经尝试了所有其他方式..我给了什么..一些如何“&lt; *&gt;” - 这个特殊的字符被附加..即使我尝试下面 请帮帮我

我的$ sqlStatement = qq /从$ tableName中删除name =? AND id =? AND place = $ place /;

打印“声明是”。 $ sqlStatement。 “\ n”;     我的$ sth = $ dbh-&gt; prepare($ sqlStatement);

DBD::Oracle::st execute failed: ORA-00904: invalid identifier (DBD ERROR: error possibly near <*> indicator at char 101 in 'delete from EMPLOYEE where ORDER_NUMBER = :p1 AND ORDER_VERSION = :p2 AND place = <*>EMPLOYEE') [for Statement "delete from EMPLOYEE where name = ? AND id = ? AND place = EMPLOYEE" with ParamValues: :p1='34534', :p2='09']

1 个答案:

答案 0 :(得分:2)

您正在使用旧方法打开文件。这是一种现代的方法:

use strict;
use warnings;
#...
open my $fh, '<', 'Queries.sql' or die $!; 
my $sql = <$fh>;
chomp $sql;
my $sth = $dbh->prepare($sql);
$sth->execute($name,$id);
#... 
close $fh;

也删除“;”在你的SQL中

我建议使用此CPAN模块Data::Phrasebook::SQL,它可能对您使用SQL的上下文有所帮助。