У меня есть имена баз данных в массиве, и я делаю их в цикле, я хочу попробовать подключиться, выполнить запрос и отключиться.
Если вы зацикливаетесь, нет причин открывать несколько баз данных. В вашем цикле откройте базу данных, сделайте свое дело и закройте.
Как я могу подключиться к нескольким базам данных в Perl без его выхода, если он не может подключиться к одной?
Я предполагаю, что это в вашем цикле. Вы всегда можете использовать eval
всякий раз, когда выполняете любую команду Perl, которая может привести к ошибке и остановить выполнение вашей программы.
Вы делаете что-то вроде этого:
for my $database (@database_list) {
my $dbh;
eval {
$dbh = DBI->connect($database, $user, $password);
};
if (not $@) {
yadda, yadda, yadda
}
}
eval
поймает любую обычную смертельную ошибку. Если $@
имеет значение, вызов не удался, а eval
вернул описание ошибки. Если $@
пусто, ошибки нет, и вы можете просто продолжить.
ОДНАКО , ПО по умолчанию, DBI не умирает автоматически, если не может подключиться. Вместо этого он просто возвращает неопределенное значение. Вы должны быть в состоянии использовать это, чтобы определить, добились ли вы успеха, или вам нужно перейти к следующей базе данных:
for my $database (@database_list) {
my $dbh = DBI->connect($database, $user, $password);
if ($dbh) {
yadda, yadda, yadda
}
}
Если я правильно помню, есть атрибут с именем RaiseError , который, если установлен, приведет к смерти вашей программы при неудачном вызове DBI. Однако значение по умолчанию не должно быть установлено, поэтому у вас не должно быть проблем.