2016-04-19 14 views
0

Ich habe eine "UPDATE" -Abfrage und ich möchte überprüfen, ob diese Abfrage Zeilen betroffen hat und wenn es hat, möchte ich eine E-Mail an mich selbst senden. Ich bin nicht wirklich erfahren mit Perl oder SQL. (Ich benutze postgresql).Überprüfen, ob Update-Abfrage betroffenen Zeilen perl

EDIT: Ich weiß, dass UPDATE "count" zurückgibt, die angibt, wie viele Zeilen, wenn alle aktualisiert worden sind, aber ich weiß immer noch nicht, wie man dazu kommt.

Der Code sieht wie folgt aus:

my $updateQuery - //UPDATE query 
if(//updateQuery has effected rows){ 
    //send mail 
}else 
    //do nothing 

Das Problem ist, ich weiß nicht, was passiert, wenn die in setzen, welche Flagge sollte ich? Gibt es eine einfache Überprüfung, dass die Antworten "Zeilen bewirkt" haben?

+0

Darf ich Ihnen eine nützliche Lektüre empfehlen? http://search.cpan.org/~rudy/DBD-Pg/Pg.pm ... – MarcoS

+1

Ich nehme an, Sie verwenden DBI, um dies zu tun (und wenn nicht, warum nicht?) Sie werden wahrscheinlich wollen Verwenden Sie die Methode 'do()', um die Abfrage auszuführen. Dies gibt die Anzahl der betroffenen Zeilen zurück. Weitere Informationen finden Sie in der Dokumentation (https://metacpan.org/pod/DBI#do). –

+0

@DaveCross Ja, ich verwende DBI. Die Variable "updateQuery" enthält eine Update-Abfrage, bei der ich einige Dinge aktualisiere. Ich habe gelesen, dass "UPDATE" bei Fertigstellung 0 oder 1 (glaube ich) zurückgibt. Das einzige Problem, das ich habe, ist, wie man diese Zahl extrahiert, damit ich sie in der if-Anweisung verwenden kann. Also, wenn aktualisiert einige Zeilen geändert wird es Mail senden, wenn nicht, dann wird es nicht. Gibt es auch eine Möglichkeit, direkt aus der Abfrage zu extrahieren, ohne irgendwelche zusätzlichen Dinge zu tun? Tut mir leid, wenn ich zu vage bin: – Username

Antwort

1

Shortcut Version do()

my $update_query = '...'; 

my $ret = $dbh->do($update_query); 

if ($ret) { 
    if ($ret eq '0E0') { 
    # no rows updated 
    } else { 
    # rows updated 
    } 
} else { 
    # error 
} 

Voll prepare()/execute() Version.

my $update_query = '...'; 
my $sth = $dbh->prepare($update_query); 

my $ret = $sth->execute; 

if ($ret) { 
    if ($ret eq '0E0') { 
    # no rows updated 
    } else { 
    # rows updated 
    } 
} else { 
    # error 
} 
Verwandte Themen