2014-11-07 2 views
0

플래그가있는 테이블을 업데이트하려면 플래그가 0이면 해당 행을 업데이트하십시오. 그러나 내 스크립트는 모든 행을 거쳐 update 문을 작성하지만 마지막 행에서만 update statemnt를 실행합니다. 아무도 내가 어디로 잘못 보았는가?내 스크립트가 마지막 행만 업데이트하는 이유는 무엇입니까?

그것은 마지막 행까지 메신저 bekomming이 오류를 도움이된다면 :

DB-라이브러리 오류 : 운영 시스템 오류 보류중인 결과로 새로운 Adaptive Server에 작업을 시작하기 시도 : 오류 0

use Sybase::DBlib; 

use Sys::Hostname; 
use Getopt::Std; 

## additionals 
use ADDITIONALS; 
my ($dsn, $database, $dbserver, $dbname, $user, $passwd, $rmdb_config) = ('','','','','','',''); 
my ($table_name,$file_name) = ('',''); 
$dsn   = "dbi:Sybase"; 
$database  = join (' ~ ',$dsn, $dbserver, $dbname, $user, $passwd, $sda_config); 
$dbhandle  = connect_me($database); 

my $ctl; 

$ctl= "select Table_name = Table_name, Filename = Filename from table123 where Flag = '0'"; 


    $dbhandle->dbcmd($ctl); 
    $dbhandle->dbsqlexec; 


     while($dbhandle->dbresults != NO_MORE_RESULTS){ 

      while(%db_data = $dbhandle->dbnextrow(1)){ 


      my $update ="update table123 set Flag = '1' where Flag ='0' and Filename ='$db_data{Filename}' "; 
      print $update."\n"; 

       $dbhandle->dbcmd($update); 
       $dbhandle->dbsqlexec; 

     } 
    } 
+0

'Sybase :: DBlib'에서'DBI '를 통해 큰 이점이 있습니까? –

+0

'select Table_name = Table_name'은 부울'true'를 선택하는 것과 같습니다. –

+0

Sybase :: DBlib over DBI dll rly 알고 있습니다. 유닉스에서 perl 드라이버 때문에 사용해야합니다. – theweeknd

답변

2

두 개의 연결이 필요합니다. 하나는 선택 용이고 다른 하나는 업데이트 용입니다. 그것이 오류 메시지가 말하는 것입니다. 선택한 대기 결과가 아직 남아 있기 때문에 업데이트를 실행할 수 없습니다.

마지막 행에서 모든 결과를 읽고 해당 최종 업데이트를 실행할 수 있습니다.

그러나 DBlib는 오래된 2 세대의 기술입니다. DBI 및 DBD :: Sybase를 사용하여 시스템을 업데이트하려면 가능한 한 수행하십시오.

+0

thx, 그것은 많이 도움이되었다. 건배 – theweeknd

관련 문제