1

我对 Perl 完全陌生。我有一个 Perl 脚本,它检查与容器中运行的 oracle 数据库的连接。这是我的代码

#!/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 database 。但是这个脚本没有向我的终端提供任何状态输出。如何检查脚本是否连接到数据库?我知道 bash 有 $?用于检查先前执行的 cmd 的状态。我们在 Perl 中有类似的东西吗?

这是我想要的输出“成功连接到 Oracle-db”,当连接正常时,当脚本无法连接到数据库时,状态为失败

注意:此代码向我的终端提供错误状态。我的 Perl 版本是 v5.16.3

4

1 回答 1

3

方法的文档是这样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';
于 2019-10-31T10:41:13.360 回答