0

我正在尝试使用 Perl 连接到 Oracle。

我正在尝试从安装了 Perl 的 Windows XP 机器进行连接。我还下载了 Oracle SQL Developer 和 Oracle Instant Client。我可以使用 TNS 连接类型使用 Oracle SQL Developer 连接到 Oracle DB。

我使用以下 Perl。

use DBI;
$db=DBI->connect( "dbi:Oracle", "username", "password" ) or die "Can't connect $DBI::errstr\n";

我收到以下错误消息。

DBI connect('','username',...) failed: ERROR OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID) Check NLS settings etc. at oracle2.pl line3
Cant connect to database ERROR OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID) Check NLS settings etc.

我是否需要对 Oracle Instant Client 执行任何操作,因为它没有安装程序。还有其他需要在 Perl 中配置的东西吗?

感谢您提供的任何帮助。

* 编辑 *

我需要在 Perl 的开头设置任何变量以链接到 SQL Developer 或 Instant Client 吗?

4

3 回答 3

1

我使用不同的方法将 Perl 连接到 Oracle DB。我使用 SQLPlus 而不是 DBI。这是 Oracle 的一个命令行实用程序,可以从 Perl 调用。下面是我的代码示例。test.sql 文件可以包含一个或多个查询,并且必须以 exit 结尾。

my $connect_string = 'username/password@server'; # connection to the DB
my $file = 'test.sql'; # location of SQL file. The file must end with "exit"

my $sqlcmd = "sqlplus -S $connect_string \@$file"; # sqlcommand
system $sqlcmd; # executes command
于 2011-07-15T12:37:05.830 回答
0

使用该错误消息和您的一段代码,我首先检查它是否有助于在第一个参数中明确$db=DBI->connect(..说明服务器名称 (如果需要,谷歌获取一些示例)。

如果这没有帮助,我会检查环境变量的值OCI_NLS_CHARSET_ID

于 2011-06-28T04:47:28.067 回答
0

中遇到了同样的问题,最后可以解决。

就我而言,事实证明(经过大量调查和阅读)问题的根源在于版本的混合。服务器是 11.2,同时我使用 12.1 Instant Client 包来Oracle.dll构建DBD::Oracle. 所以我下载了 11.2 版本(来自Oracle),这个错误信息就消失了!

我已经阅读了故障排除手册,但似乎需要 3 个包:Basic、SDK 和 sqlplus(构建过程使用后者来确定服务器版本)。

在构建之前必须设置一些 bash 变量:

export ORACLE_HOME=/cygdrive/c/install/instantclient_11_2
PATH+=:"$ORACLE_HOME"
export TNS_ADMIN="$HOME"

后者需要找到Oracle.dll 引用的oci.dll。当 Windows 查找 PATH 以查找 DLL 而不是 LD_LIBRARY_PATH 时,这将添加到 PATH。文件tnsnames.ora可以在$TNS_ADMINdir 中,也可以在 in/var/opt/oracle或 in /etc(或其他一些地方)中。定义的服务名称可以由 列出DBI->data_sources('Oracle')

瞧!我希望这会有所帮助!

于 2016-12-13T11:06:01.257 回答