Tôi có một tập lệnh chèn Perl vào Postgres theo một tệp văn bản được phân tách bằng đường ống. Đôi khi, một trường là null (như mong đợi). Tuy nhiên, Perl làm cho trường này thành một chuỗi rỗng và câu lệnh chèn Postgres không thành công.Làm cách nào để chèn các trường rỗng bằng DBD :: Pg của Perl?
Dưới đây là một đoạn mã:
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]);
}
Và nếu đầu vào là:
a|1 b| c|3
EDIT: Sử dụng đầu vào này để thay thế.
a|1|x b||x c|3|x
Nó sẽ thất bại tại b|
.
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
Tôi chỉ muốn chèn null vào trường1 để thay thế. Bất kỳ ý tưởng?
EDIT: Tôi đã đơn giản hóa đầu vào ở phút cuối cùng. Các đầu vào cũ thực sự làm cho nó hoạt động vì một lý do nào đó. Vì vậy, bây giờ tôi đã thay đổi đầu vào thành một cái gì đó mà sẽ làm cho chương trình thất bại. Cũng lưu ý rằng field1 là một kiểu dữ liệu số nguyên nullable.
Mã này làm việc ở đây, Perl 5.10.1, DBD :: Thạc 2.15.1 , Postgres 8.4. Ngoài ra tại sao bạn sử dụng SELECT?,? thay vì VALUES (?,?)? – MkV
Ngoài ra, hãy sử dụng nghiêm ngặt; sử dụng cảnh báo; và sửa các khai báo biến của bạn – MkV
Giới thiệu về định dạng SQL .. mã thực sự thực sự có một số phép nối trên lựa chọn đó. – User1