我有一個Perl腳本根據管道分隔文本文件將數據插入到Postgres中。有時,一個字段爲空(按預期)。但是,Perl會將此字段設置爲空字符串,並且Postgres插入語句失敗。如何在Perl的DBD :: Pg中插入空字段?
下面是一個代碼片段:
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|1 b| c|3
編輯:改用此輸入。
a|1|x b||x c|3|x
它會在b|
失敗。
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
我只是想讓它在field1上插入一個空字符。有任何想法嗎?
編輯:我在最後一分鐘簡化了輸入。舊的輸入實際上是由於某種原因而起作用的。所以現在我改變了輸入,以使程序失敗。另請注意,field1是一個可爲空的整型數據類型。
此代碼工作在這裏,Perl的5.10.1,DBD :: PG 2.15.1 ,Postgres 8.4。另外你爲什麼使用SELECT?,?而不是VALUES(?,?)? – MkV 2010-05-18 17:46:46
另外,使用嚴格;使用警告; 並修復你的變量聲明 – MkV 2010-05-18 17:51:42
關於SQL格式..真正的代碼實際上有一些連接選擇。 – User1 2010-05-18 19:47:22