Perlで複数のデータベースに接続できない場合、どうすれば救済できますか?配列内にデータベース名があり、ループでそれらをトラフする場合は、接続してクエリを実行して切断する必要があります。私は私たちが持っている兄弟サーバーの監視ページにそれを報告するつもりです。明らかに配列内のすべてのものをチェックする必要があるので、スクリプトが接続できなければスクリプトを終了させたくありません。今はDBIモジュールのステートメソッドを使用していますが、正しく動作するかどうかはわかりません。みんなありがとう!perlスクリプトで複数のデータベースに接続する
答えて
コードを確認できますか?私も使ってかなり確信している
DBI->connect($dsn, $user, $pass) or die "Can't connect: $DBI::errstr\n";
{RAISEERROR => 1}、それは自動的に死ぬことはありません。のように私は、あなたが明示的にそれを指示しない限りDBI->connect()
への呼び出しが死んでしまうとは思いません。だから、もしあなたがor die...
と呼んでいるのであれば、それをしないでください!
編集:私は、アレイ内のデータベース名を持ち、ループ内でそれらをトラフ行く
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
、:
投稿@squiguyコードを考えると、私はこのようにそれを行うだろう接続してクエリを実行して接続を切断しようとします。
ループしている場合は、複数のデータベースを開く必要はありません。あなたのループでは、データベースを開き、あなたのものを行い、閉じます。
Perlで複数のデータベースに接続するにはどうしたらいいですか?
私はこれがあなたのループにあると仮定しています。 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. Perlデータベース接続
- 2. 複数のデータベースに接続する
- 3. 複数のデータベース接続
- 4. 複数のデータベース接続
- 5. Yii複数のデータベース接続
- 6. Express - 複数のデータベース接続
- 7. PHPの複数データベース接続
- 8. 複数のデータベースを関数で接続
- 9. java内の複数のデータベースに接続
- 10. アクティブレコードに複数のデータベースへの接続
- 11. StackExchange.Redis複数のデータベースに接続
- 12. MongoDB親子接続で複数のデータベースに接続するときのパフォーマンス
- 13. SpringブートJPAで複数のデータベースに接続するには?
- 14. laravelで複数のホスト/データベースに接続する方法
- 15. MyBatis - 同じサービスコールで複数のデータベースに接続する
- 16. subsonic 3.0.0.3複数のデータベース接続のフェールオーバー
- 17. 複数のデータベース接続が可能
- 18. Ruby on Rails - 複数のデータベース接続
- 19. Laravelパスポートoauth複数のデータベース接続
- 20. ループバック+複数のデータベースを接続
- 21. 複数のデータベース接続とhas_manyから
- 22. 複数のperlスクリプトが必要です
- 23. PHPファイル内の複数のデータベースに接続するには?
- 24. 複数のSQLサーバーに接続するPythonスクリプト
- 25. 2番目のデータベース接続を使用してYii1アクセスモデルクラス。複数のデータベース接続
- 26. PHP Zend Framework:一度に複数のデータベースに接続する
- 27. Laravelで複数のデータベースを接続する最良の方法
- 28. Magentoで複数の外部データベースを接続する方法は?
- 29. SQLが複数のデータベース接続から複数のテーブルに参加する
- 30. Grafanaでのデータベース接続数
'foreach my $ host(@hosts){ $ dbh = DBI-> connect(" dbi:Oracle ;; host = $ host; port = $ port "、$ username、$ password); if($ dbh-> state()) ' 私は基本的に接続を実行していますが、接続されているかどうかを確認するために状態を使用しています。これは私にとってはうまくいかないようです。私が何をしようとしているのか、それとももっと説明する必要があるのかを教えてください。ありがとう – squiguy
接続が失敗した場合、 '$ dbh'は未定義で、' $ dbh-> state() '呼び出しは致命的な実行時エラーになります。代わりにif($ dbh && $ dbh-> state())...と言ってください。 – mob
はい、@モブ答えで行ってください。別のテストに分割することもできます。接続できない場合や、ステータスが誤った値を戻している場合は、その旨を伝えることができます。 –