perl에서 연결할 수없는 경우 어떻게 해결할 수 있습니까? 배열에 데이터베이스 이름이 있고 루프에서 물마루가있는 경우 쿼리를 연결하고 연결을 시도하고 연결하려고합니다. 나는 그것을 우리가 가지고있는 형제 서버 모니터링 페이지로 다시보고 할 것이다. 분명히 배열의 모든 것을 검사해야하기 때문에 스크립트가 하나에 연결할 수 없으면 스크립트를 종료하지 않기를 바란다. 지금은 DBI 모듈 상태 메서드를 사용하지만 제대로 작동하는지 모르겠습니다. 누구나 시간을내어 주셔서 감사합니다!perl 스크립트로 여러 데이터베이스에 연결하기
답변
코드를 볼 수 있습니까? 난 당신이 명시 적으로 그것을 말하지 않는 DBI->connect()
에 대한 호출이 같이 죽을 생각하지 않는다 :
DBI->connect($dsn, $user, $pass) or die "Can't connect: $DBI::errstr\n";
심지어 {RaiseError => 1} 자동으로 죽을하지 않습니다 사용 확신 해요. 따라서 or die...
으로 전화하는 경우에는하지 마십시오!
는 편집 : 게시 @squiguy 코드를 감안할 때
, 나는 이런 식으로 할 것 :
foreach my $host (@hosts) {
$dbh = DBI->connect("dbi:Oracle:; host=$host; port=$port", $username, $password);
next unless $dbh;
if ($dbh->state()) {
# Do stuff with state information
}
}
Perl에서 예외 처리를 찾아야합니다. Perl을 사용하지 않기 때문에 예외 처리를위한 구문을 알지 못하고 온라인에서 쉽게 찾을 수 있어야합니다.
나는 그 일을하는 법에 익숙하지만 계속 진행하기 위해 어떤 예외도 찾을 수 없다. 그들 모두는 끝내는 것처럼 보인다.귀하의 의견을 주셔서 감사합니다 – squiguy
내가 배열의 데이터베이스 이름을 가지고 루프에서 그들을 물마루 이동 연결을 시도하고 연결하고 쿼리를 수행하고 연결을 끊으려고합니다.
루핑 중이라면 여러 데이터베이스를 열 필요가 없습니다. 루프에서 데이터베이스를 열고, 물건을 처리하고 닫습니다.
연결할 수없는 경우 어떻게 해결할 필요없이 펄없이 여러 데이터베이스에 연결할 수 있습니까?
나는 이것이 당신의 반복에 있다고 가정하고 있습니다. 오류가 발생할 수있는 Perl 명령을 수행 할 때마다 언제든지 eval
을 사용하여 프로그램 실행을 중지 할 수 있습니다. eval
보통 치명적인 오류의 종류를 잡을 것
for my $database (@database_list) {
my $dbh;
eval {
$dbh = DBI->connect($database, $user, $password);
};
if (not [email protected]) {
yadda, yadda, yadda
}
}
:
은 당신이 뭔가를 할. [email protected]
에 값이 있으면 호출이 실패하고 eval
이 오류 설명을 반환했습니다. [email protected]
이 비어 있으면 오류가 발생하지 않으며 계속 진행하면됩니다.
기본적으로 DBI는 연결할 수없는 경우 자동으로 종료되지 않습니다. 대신 정의되지 않은 값을 반환합니다. 세트 죽을 프로그램 발생할 경우 것으로
for my $database (@database_list) {
my $dbh = DBI->connect($database, $user, $password);
if ($dbh) {
yadda, yadda, yadda
}
}
내 기억이 맞다 경우는, RaiseError라는 속성이있다 : 당신은 당신이 성공했는지 확인하는 것을 사용하거나 다음 데이터베이스로 이동해야 할 수 있어야한다 실패한 DBI 호출에서. 그러나 기본값을 설정하지 않아야하므로 문제가 발생하지 않아야합니다.
나는 이것을 발사하고 무슨 일이 일어나는지를 보게 될 것이다. – squiguy
- 1. CGI 스크립트로 페이지 연결하기
- 2. Java로 데이터베이스에 연결하기
- 3. 네트워크상의 MySQL 데이터베이스에 연결하기
- 4. Dwoo를 통해 데이터베이스에 연결하기
- 5. ios에서 mysql 데이터베이스에 연결하기
- 6. 서블릿을 데이터베이스에 연결하기 as400
- 7. VB.NET을 MySQL 데이터베이스에 연결하기
- 8. 여러 데이터베이스 사이에 연결하기
- 9. Perl 스크립트로 사운드 재생하기
- 10. 서버를 통해 MySQL 데이터베이스에 연결하기
- 11. 사용자 이름과 비밀번호로 데이터베이스에 연결하기
- 12. PHP와 MySQL을 사용하여 데이터베이스에 연결하기
- 13. Python GUI를 MySQL 데이터베이스에 연결하기
- 14. 데이터베이스에 연결하기 초보자를위한 SQL 서버
- 15. Perl 스크립트로 ASPX 페이지에 로그인
- 16. 변수를 HTML에서 perl 스크립트로 전달
- 17. 루비에서 여러 배열 연결하기
- 18. 여러 도메인을 서버에 연결하기
- 19. 여러 테이블을 루아에서 연결하기
- 20. 는 데이터베이스에 연결하기 전에 작업을 수행합니다
- 21. PHP - 다른 서버에서 mysql 데이터베이스에 연결하기
- 22. RubyMine을 사용하여 Ruby 프로그램을 SQLite 데이터베이스에 연결하기
- 23. DataBase 풀링 - Spring3 MVC에 Mysql 데이터베이스에 연결하기
- 24. codeigniter로 두 개 이상의 데이터베이스에 연결하기
- 25. 여러 달의 여러 데이터베이스 테이블 항목 연결하기
- 26. Apache를 여러 도메인으로 톰캣에 연결하기
- 27. IBOutletCollection - 한번에 여러 객체 연결하기
- 28. PHP 스크립트를 변경하여 Perl 스크립트로 실행
- 29. <UNIX의 연산자, Perl 스크립트로 전달
- 30. Python 스크립트로 Perl 스크립트의 결과를 얻으려면 어떻게해야합니까?
'foreach my $ host (@hosts) { $ dbh = DBI-> connect ("dbi : Oracle 호스트; $ 호스트; 포트 = $ 포트", $ 사용자 이름, $ 비밀 번호); if ($ dbh-> state())' 기본적으로 연결을 수행하고 연결되어 있는지 여부를 확인하기 위해 상태를 사용합니다. 이것은 나를 위해 작동하지 않는 것 같습니다. 내가하려는 일을하거나 더 설명해야 할 필요가 있다면 알려주십시오. Thanks – squiguy
연결에 실패하면'$ dbh '가 정의되지 않고'$ dbh-> state()'호출은 치명적 런타임 오류가됩니다. if ($ dbh && $ dbh-> state()) ... '라고 대신 말하십시오. – mob
네, @ mob 답으로 가십시오. 또한 개별 테스트로 분리하여 연결할 수 없거나 상태가 거짓 값을 다시 시도하는지 확인할 수 있습니다. –