【发布时间】:2010-05-18 16:44:58
【问题描述】:
我有一个 Perl 脚本根据管道分隔的文本文件将数据插入 Postgres。有时,字段为空(如预期的那样)。但是,Perl 将这个字段变成了一个空字符串,并且 Postgres 的插入语句失败了。
这是一段代码:
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]);
}
如果输入是: 罢工>
一个|1 乙| c|3编辑:改用这个输入。
一个|1|x b||x c|3|x它将在b| 失败。
DBD::Pg::st 执行失败:错误:整数输入语法无效:“”
我只想让它在 field1 上插入一个空值。有什么想法吗?
编辑:我在最后一分钟简化了输入。由于某种原因,旧的输入实际上使它起作用。所以现在我将输入更改为会使程序失败的东西。另请注意,field1 是可为空的整数数据类型。
【问题讨论】:
-
这段代码在这里工作,Perl 5.10.1,DBD::Pg 2.15.1,Postgres 8.4。另外,您为什么要使用 SELECT ?,?而不是 VALUES (?,?)?
-
另外,使用严格;使用警告;并修复你的变量声明
-
关于 SQL 格式..实际代码实际上在该选择上有一些连接。
标签: perl postgresql dbi