2010-07-21 6 views
3

Dans mon code, je dois faire une simple requête sql avec une condition similaire. j'ai fais de cette façonperl, dbi avec une instruction SQL avec une condition similaire

my $out = "/Users/zero/out.log"; 
my $filename = "/Users/zero/data.txt"; 


my $dbh = DBI->connect("DBI:Oracle:sid=$sid;host=$host;port=$port", $user, $pwd) or die "Couldn't connect to database: " . DBI->errstr; 
my $query = "select SOMETHING from SOMETHING_1 where SOMETHING like ?||'%' "; 
my $sth = $dbh->prepare($query) or die "Connection Error: " . $dbh->errstr; 
open (IN,"< $filename") or die("Unable to open $filename");   
my @righe = <IN>; 
close IN; 
open (OUT,">$out") or die "Unable to open $out"; 
foreach my $riga (@righe) { 
     chomp $riga; 
     (my $valore) = split (/\n/, $riga); 
     $sth->execute($valore) ||print "Impossibile eseguire la query $query"; 
     while (my $real = $sth->fetchrow_array) { 
         print OUT "\"$real\"\n"; 
        } 
    } 
$sth->finish; 
$dbh->disconnect(); 

mais la requête retourner toutes les lignes, en ignorant la condition comme. Où est ma faute?

de

+2

non lié mais utiliser des handles de fichiers lexicaux et 3 fichiers ouverts. par exemple. open (my $ in, '<', $ filename) ou die ...; # 3 fichier ouvert empêche les vulnérabilités et les limites lexicales portée http://perldoc.perl.org/functions/open.html – xenoterracide

+0

Oh, je recommande également de casser les longues lignes et plus d'espaces. – xenoterracide

Répondre

7

Remerciez Vous devez concaténer le% omble chevalier à la variable que vous recherchez.

my $query = "select SOMETHING from SOMETHING_1 where SOMETHING like ?"; 
... 
$sth->execute($valore.'%') ||print "Impossibile eseguire la query $query"; 
+0

ok, je vais essayer maintenant. J'ai essayé de concaténer le '%' mais dans ma requête $. – zebra

+2

Vous ne pouvez pas utiliser le caractère '%' dans votre requête, car vous utilisez l'espace réservé '? 'Qui cite automatiquement votre variable' $ valore' (ce qui est une bonne chose à faire). Cela signifie que l'utilisation de '%' dans votre * requête * conduit à une chaîne qui ressemble à '" somevalue "%' alors qu'elle devait ressembler à '" somevalue% "'. – Jonas

+0

@Jonas C'était vraiment utile car j'ai dû faire face au même problème jusqu'à maintenant. À votre santé. – aki2all

Questions connexes