2

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< >;' の char 86 の < > インジケータ付近でエラーが発生した可能性があります) [ for Statement "delete from Employee where name = ? and id = ?;" ParamValues: :p1='3453', :p2='4545'] ExecuteDelete.pl 行 32、チャンク 1 で。

ExecuteDelete.pl 行 32、チャンク 1 で実行できません

ここで私を助けてください。ここで何か間違ったことをしているかどうかはわかりません。

私は他のすべての方法を試しました..私が与えるものは何でも..いくつかの方法「<*>」-この特別な文字が追加されています..私は以下のように試しました助けてください

my $sqlStatement = qq/delete from $tableName where name = ? AND ID = ? AND 場所 = $場所/;

print "ステートメントは " . $sqlStatement . "\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']
4

1 に答える 1

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 を使用しているコンテキストで役立つ場合があります。

于 2013-07-09T19:31:41.247 に答える