Как проверить статус ранее выполненной команды в Perl - PullRequest
0 голосов
/ 31 октября 2019

Я совершенно новичок в Perl. У меня есть скрипт Perl, который проверяет соединение с базой данных оракула, работающей в контейнере. Вот мой код

#!/usr/bin/perl
use DBI;

$\="\n";

print "Connecting to DB..";


my $dbh = DBI->connect('dbi:Oracle:host=oracle;sid=ORCLCDB;port=1521', 'books_admin/MyPassword', '',{ RaiseError => 1, AutoCommit => 0 })or die print ("could not connect! $DBI::errstr \n");

Используя этот скрипт, я могу подключиться к базе данных Oracle. Но этот скрипт не выдает статус моего терминала. Как я могу проверить, что скрипт подключен к базе данных? Я знаю, что у Bash есть $? для проверки статуса ранее выполненного cmd. У нас есть что-то похожее в Perl?

Вот что я хочу Вывод "Успешно подключен к Oracle-db", когда соединение в порядке, и состояние сбоя, когда сценарий не может подключиться к базе данных

Примечание. Этот код указывает состояние ошибки моего терминала. Моя версия Perl v5.16.3

1 Ответ

3 голосов
/ 31 октября 2019

Документация для метода connect() гласит следующее:

Устанавливает соединение с базой данных или сеанс с запрашиваемым $data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно. Используйте $dbh->disconnect для разрыва соединения.

Если соединение не удается (см. Ниже), возвращается undef и задаются значения $DBI::err и $DBI::errstr. (Он явно не устанавливает $!.) Как правило, вы должны проверить состояние возврата connect и вывести $DBI::errstr, если он не удался.

Таким образом, ваш код может быть таким же очевидным, как:

my $dbh = DBI->connect(...);
if ($dbh) {
  say 'Connection ok';
} else {
  die "Connection error: $DBI::errstr";
}

Однако вы используете RaiseError => 1, поэтому ваша программа будет die вместо того, чтобы возвращать undef. Поэтому, если ваша программа проходит эту линию, вы знаете, что соединение было успешным.

my $dbh = DBI->connect(...);
say 'Connection ok';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...