当我尝试连接到Oracle 11g时,为什么Perl的DBI会抱怨"失败:错误OCIEnNN创建"?

Joh*_*ohn 5 oracle perl dbi

我使用简单的Perl脚本连接到Oracle 11g数据库时出现以下错误:

 failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc. at
Run Code Online (Sandbox Code Playgroud)

脚本如下:

#!/usr/local/bin/perl

use strict;
use DBI;

if ($#ARGV < 3) {
print "Usage: perl testDbAccess.pl dataBaseUser dataBasePassword SID dataBasePort\n";
exit 0;
}
my ($user, $pwd, $sid, $port) = @ARGV;

my $host = `hostname`;
my $dbh;
my $sth;
my $dbname = "dbi:Oracle:HOST=$host;SID=$sid;PORT=$port";

openDbConnection();
closeDbConnection();

sub openDbConnection() {
        $dbh = DBI->connect ($dbname, $user ,$pwd , { RaiseError => 1}) || die "Database connection not made: $DBI::errstr";
}

sub closeDbConnection() {
        #$sth->finish();
        $dbh->disconnect();
}
Run Code Online (Sandbox Code Playgroud)

以前有人见过这个问题吗?

hob*_*bbs 6

检查Oracle客户端配置(包括,如消息所示,ORACLE_HOME),检查文件权限等.DBI本身不太可能与问题有关,我知道DBD :: Oracle与之兼容的事实11g库(至少11g InstantClient).

  • [详尽的故障排除信息](http://search.cpan.org/dist/DBD-Oracle/) - 从文件`README`和`README.help.txt`开始. (2认同)
  • 不要只是将ORACLE_HOME更改为指向不同的oracle客户端库而不重建DBD :: Oracle - 它很可能无法正常工作.构建DBD时,Oracle会检查头文件和客户端,以查看您拥有的版本,并构建适合您的客户端库的DBD :: Oracle.有太多理由加​​载评论太多了. (2认同)