Tengo un script de Perl que inserta datos en Postgres de acuerdo con un archivo de texto delimitado por tuberías. A veces, un campo es nulo (como se esperaba). Sin embargo, Perl convierte este campo en una cadena vacía y falla la instrucción de inserción de Postgres.¿Cómo inserto campos nulos con DBD :: Pg de Perl?
He aquí un fragmento de código:
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]);
}
Y si la entrada es:
a|1 b| c|3
EDIT: Utilice esta entrada en su lugar.
a|1|x b||x c|3|x
Fallará en b|
.
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
Solo quiero que inserte un nulo en el campo1 en su lugar. ¿Algunas ideas?
EDITAR: simplifiqué la entrada en el último minuto. La entrada anterior realmente lo hizo funcionar por alguna razón. Así que ahora cambié la entrada a algo que hará que el programa falle. También tenga en cuenta que field1 es un tipo de datos enteros anulables.
Este código funciona aquí, Perl 5.10.1, 2.15.1 DBD :: Pg , Postgres 8.4. Además, ¿por qué estás usando SELECT? en lugar de VALUES (?,?)? – MkV
Además, use strict; usa advertencias; y arregle sus declaraciones de variables – MkV
Acerca del formato SQL ... el código real en realidad tiene algunas combinaciones en esa selección. – User1