2014-04-16 8 views
0

perl에서 DBD::Oracle 모듈을 사용하여 xml 내용을 oracle 11 g 인스턴스에 삽입하고 있습니다. 일부 샘플을 샘플에 삽입하는 동안 모듈이 Unsupported named object type for bind parameter을 반환 할 때 스크립트가 실패합니다. 이 오류를 처리하고 루프 반복을 계속하고 싶습니다. perl에서 모듈에 의해 던져진 에러를 처리하는 방법

다음

use strict; 
use warnings; 
use DBI; 
use DBD::Oracle qw(:ora_session_modes); 
use DBD::Oracle qw(:ora_types); 

die("USAGE: $0 <input_directory>") unless ($#ARGV == 0); 
my $directory=$ARGV[0]; 

my $dbh = DBI->connect('dbi:Oraclle:dbname',"username", "pass"); 
my $SQL; 



opendir(IMD, $directory) || die ("Cannot open directory"); 
my @listOfFiles= readdir(IMD); 
closedir(IMD); 

my $xmltype_string; 
my $xml; 
my $i = 1; 
foreach my $file(@listOfFiles) 
{ 
    unless($file eq '.' or $file eq '..') 
    { 
     print "inserting File no. $i \t $file .... \n"; 

     { 
       local $/=undef; 
       open (FILE , "<" , "$directory/$file"); 
       $xml=<FILE>; 
       close (FILE); 
     } 
     $SQL="insert into sampleTable values (:ind, :xml)"; 
     my $sth =$dbh-> prepare($SQL); 
     $sth->bind_param(":xml" , $xml , { ora_type => ORA_XMLTYPE}); 
     $sth->bind_param(":ind" , $i); 
     $sth-> execute(); 


     $i++; 
    } 
} 

은 암이 바인드 PARAM에서 오류가 발생, 내 코드입니다.

답변

4

오류 처리는 일반적으로 Try::Tiny 모듈을 통해 수행됩니다

use Try::Tiny; 

try { 
    something_that_could_die(); 
} 
catch { 
    handle_error($_); 
} 
finally { 
    do_something_either_way(); 
}; # ← trailing semicolon not optional. 

모두 catchfinally는 선택 사항입니다.

+0

정확하게 내가 찾고있는 것이 었습니다. 고마워요 !! –