2014-12-03 92 views
0

連接時重新調整錯誤的價值觀我有folllowing Perl代碼:我的Perl DBI->連接失敗

my $dbo_prd = DBI->connect(
    "dbi:Oracle:host=$db_srv_prd;port=1521;sid=$db_sid_prd", 
    $db_user_prd, 
    $db_pass_prd 
) || warn &senderror("TREE_STRUCTURE.Could not connect to $db_srv_prd: $DBI::errstr\n"); 

print "\n\nconnection:" . $dbo_prd . "\n"; 
if ($dbo_prd != 1){ 
    print "in prod prepare\n\n"; 
    my $query1_prd = $dbo_prd->prepare(
     "INSERT INTO CMSV2.CMS_INBOX VALUES (
      'vmsdk', (SELECT SYSDATE from DUAL), 'NODE_TREE_UPDATE',?,?,?,?,NULL,NULL 
     )" 
    ) || warn &senderror("TREE_STRUCTURE.Could not prepare to $db_srv_prd: $DBI::errstr\n"); 
} 

說我遇到的問題是,我認爲,如果連接不工作它會將連接$ dbo_prd設置爲undef,但將它設置爲1?這不是文檔在任何地方的狀態。

連接在失敗時打印爲「1」,如果連接成功,則連接將被打印輸出。

回答

7

你有一個優先級的錯誤在這裏:

|| warn 

即分配警告你的變量時,連接失敗的返回值。使用這個來代替:

or warn 

(警告,如打印,如果成功返回1)

始終使用低優先級and/or的之間有什麼本質的不同表現形式的流量控制;僅在基本上所有一個表達式(例如my $foo = $bar eq 'a' || $bar eq 'b')內使用高優先級&&/||