2016-12-14 13 views
0

Oracle Databaseを更新するための次のperlスクリプトがあります。それは完璧に動作しています。DB更新用スクリプト

use DBI; 
my $dbh; 
my $bad_form = "text.txt"; 

open (OUT, $bad_form) or die "Could not open $bad_form"; 
while (<OUT>){ 
    chomp $_; 
    my ($item_id, $description, $form_id_1, $form_id_3) = split(/\|/, $_); 

    my $new_form_id_1 = form_1($form_id_1); 
    my $new_form_id_3 = form_3($form_id_3); 

    if ($new_form_id_1 ne 'null'){ 
      my $sql = "update item_table set form_id_1 = '$new_form_id_1' where item_id = '$item_id'"; 
      my $item = $dbh->prepare($sql) or (log_error("Couldn't prepare statement: " . $dbh->errstr) and return 2); 
      $item->execute() or (log_error("Couldn't execute statement: " . $item->errstr) and return 2); 
    }else{ 
      $form_id_1 = "correct value"; 
      $new_form_id_1 = "no updated"; 
    } 

    if ($new_form_id_3 ne 'null'){ 
      my $sql = "update item_table set form_id_3 = '$new_form_id_3' where item_id = '$item_id'"; 
      my $item = $dbh->prepare($sql) or (log_error("Couldn't prepare statement: " . $dbh->errstr) and return 2); 
      $item->execute() or (log_error("Couldn't execute statement: " . $item->errstr) and return 2); 

    }else{ 
      $form_id_3 = "correct value"; 
      $new_form_id_3 = "no updated"; 
    } 
} 

関数form_1()とform_3は()form_id_1,3のために生成された新しい値に使用されています。しかし、私はこのスクリプトを簡素化する方法を知りたいです。

ご協力いただければ幸いです。ご協力いただきありがとうございます。

+0

この質問は、[codereview.se] –

+0

でより適切になります。コードレビューSEに属しているため、この質問を議論の対象外としています –

答えて

1

use strict;

をプレースホルダとして使用して、ループのうち2つをに移動します。次に、ループ内の適切な準備済みステートメントハンドルに対してのみexecute($new_form_id_x, $item_id)を呼び出します。