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

Posted

技术标签:

【中文标题】如何删除从perl读取sql文件时附加的特殊字符【英文标题】:how to remove the special characters which is getting appended while reading sql file from perl 【发布时间】:2013-07-07 13:05:18 【问题描述】:

我正在尝试使用 perl 从 sql 文件执行查询,但是当我尝试时,我看到在查询之间或查询末尾附加了一些特殊字符。我不确定如何解决这个问题。

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 错误:'delete from Employee where name = :p1 and id = :p2>;') [for Statement "delete 来自员工,其中姓名 = ?和 id = ?;" 与 ParamValues: :p1='3453', :p2='4545'] 在 ExecuteDelete.pl 第 32 行,块 1。

无法在 ExecuteDelete.pl 第 32 行,块 1 处执行

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

我已经尝试了所有其他方法..我给了什么..一些“” - 这个特殊字符正在附加..即使我尝试如下 请帮帮我

my $sqlStatement = qq/delete from $tableName where name = ?和身份证=? AND 地点 = $place/;

print "声明是" . $sql语句。 "\n"; 我的 $sth = $dbh->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']

【问题讨论】:

尝试用单引号将? 括起来,'?' 是的,我已经尝试过了。但是现在附加了一些其他字符 :( DBD::Oracle::st 执行失败:当需要 0 时使用 2 个绑定变量调用 [for Statement "delete from Employee where name = '?' and id = '?';"] at ExecuteDelete.pl line 32, chunk 1. 我不认为它正在考虑?用单引号。我认为这就是为什么我得到不必要的争论 尝试使用sql+sql developer从文件中查询 【参考方案1】:

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

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 的上下文有所帮助。

【讨论】:

即使这样我也得到了同样的错误:(特殊字符被附加在语句的末尾 您是否删除了最后一个“?”中的所有字符? ? 是的,我做到了..这是我现在的声明..从 Employee where name = 中删除和 id = ?

以上是关于如何删除从perl读取sql文件时附加的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件中读取特殊字符?

在 Perl 中,如何从文件中删除 ^M?

使用 perl 脚本从字符串中删除特殊字符

使用 Perl 从字符串中删除 BOM

从NSString中删除一些特殊字符,以获取附加到电子邮件的文件名PDF

从C#中的数据中删除特殊字符后如何将dbf文件中的数百万行数据上传到SQL Server