मेरे पास एक पाइप सीमांकित टेक्स्ट फ़ाइल के अनुसार पोस्टग्रेस में डेटा डालने वाला एक पर्ल स्क्रिप्ट है। कभी-कभी, एक फ़ील्ड शून्य (अपेक्षित के रूप में) है। हालांकि, पर्ल इस क्षेत्र को एक खाली स्ट्रिंग में बनाता है और पोस्टग्रेस सम्मिलन कथन विफल रहता है।मैं पर्ल के डीबीडी :: पीजी के साथ शून्य फ़ील्ड कैसे डालूं?
यहाँ कोड का एक टुकड़ा है:
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 पर एक शून्य डालना चाहता हूं। कोई विचार?
संपादित करें: मैंने अंतिम मिनट में इनपुट को सरल बना दिया। पुराने इनपुट ने वास्तव में इसे किसी कारण से काम किया है। तो अब मैंने इनपुट को कुछ ऐसा बदल दिया जो प्रोग्राम को विफल कर देगा। यह भी ध्यान रखें कि फ़ील्ड 1 एक निरर्थक पूर्णांक डेटाटाइप है।
इस कोड को यहाँ काम करता है, पर्ल 5.10.1, DBD :: Pg 2.15.1 यूएनडीईएफ को , पोस्टग्रेर्स 8.4। आप SELECT का उपयोग क्यों कर रहे हैं? VALUES के बजाय (?,?)? – MkV
इसके अलावा, सख्त उपयोग करें; चेतावनियों का प्रयोग करें; और अपनी परिवर्तनीय घोषणाओं को ठीक करें – MkV
एसक्यूएल प्रारूप के बारे में .. असली कोड वास्तव में कुछ उस चयन पर शामिल हो गया है। – User1