2016-07-28 32 views
5

Napisałem próbkę programu Perl, aby usunąć dane z tabeli bazy danych.Dlaczego otrzymuję 0E0 dla zwracanej wartości metody "execute" DBI?

Jest to kod Pisałem,

use DBI; 

my $dbh = DBI->connect("DBI:Pg:host=192.168.12.23;port=5432;", "adhi");                     
if ($dbh) { 

    print "Connected successfully\n"; 

    my $exe = $dbh->prepare("delete from perl_test.test"); 
    my $res = $exe->execute(); 
    if ($res) { 
     print "deleted the table successfully of rows: $res\n"; 
    } 
} 

Gdybym Wykonaliśmy powyższego należy wydrukować pomyślne wiadomości, a następnie liczbę wierszy usuniętych.

Jeśli tabela była pusta, wydrukowano 0E0 zamiast 0. Nie wiem, jak zwraca wartość w ten sposób?

Czy ktoś może mi wyjaśnić, jak to działa?

+1

Pisałeś * "W tym, że użyłem metody" wykonaj "do wykonania zapytania" * ale twój program * nie * używa metody 'do', więc usunąłem to zdanie. Proszę również odpowiednio wstawić kod Perla, aby był czytelny, szczególnie zanim poprosisz o pomoc. – Borodin

+0

Dzięki Borodin. Zmienię to. –

Odpowiedz

9

Jest to wykonywane w ten sposób, aby umożliwić sprawdzenie, czy operacja zakończyła się powodzeniem. Powodem jest, że '0E0' (jako ciąg) jest wartością rzeczywistą, ale 0 jest fałszywą wartością w Perlu. Dlatego:

  1. można testować wartość zwracaną w if w celu ustalenia, czy operacja powiodła się (true oznacza sukces),

  2. ale można również używać wartości zwracanej jako liczba znać dokładną liczba usuniętych wierszy, ponieważ 0E0 ocenia na 0, gdy jest używane jako liczba.

Jeśli potrzebujesz tylko liczbę usuniętych wierszy, można użyć $res + 0 lub $res * 1. Ale dopiero po sprawdzeniu, czy operacja zakończyła się powodzeniem.