Mam skrypt Perl wstawiający dane do PostgreSQL według pliku tekstowego rozdzielanego potokami. Czasami pole ma wartość zerową (zgodnie z oczekiwaniami). Jednak Perl czyni to pole pustym łańcuchem, a instrukcja wstawiania Postgreatora nie powiedzie się.Jak wstawić puste pola z DBD :: Pg Perla?
Oto fragment kodu:
use DBI;
#Connect to the database.
$dbh=DBI->connect('dbi:Pg:dbname=mydb','mydb','mydb',{AutoCommit=>1,RaiseError=>1,PrintError=>1});
#Prepare an insert.
$sth=$dbh->prepare("INSERT INTO mytable (field0,field1) SELECT ?,?");
while (<>){
#Remove the whitespace
chomp;
#Parse the fields.
@field=split(/\|/,$_);
print "$_\n";
#Do the insert.
$sth->execute($field[0],$field[1]);
}
A jeśli wejście jest:
a|1 b| c|3
EDIT: Za pomocą tego wejścia zamiast.
a|1|x b||x c|3|x
To się nie uda pod numerem b|
.
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
Po prostu chcę wstawić pustą wartość na pole1. Jakieś pomysły?
EDYCJA: Uprościliśmy dane wejściowe w ostatniej chwili. Stare dane sprawiły, że działało z jakiegoś powodu. Teraz zmieniłem dane wejściowe na coś, co spowoduje awarię programu. Zauważ też, że field1 jest zerowym typem danych całkowitych.
ten kod działa tutaj, Perl 5.10.1, DBD :: Pg 2.15.1 , Postgres 8.4. Dlaczego używasz SELECT? zamiast VALUES (?,?)? – MkV
Należy również użyć ścisłego; używać ostrzeżeń; i popraw swoje deklaracje zmiennych – MkV
O formacie SQL. Prawdziwy kod ma w rzeczywistości kilka złączeń w tym wyborze. – User1