Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Perl连接到Oracle_Perl_Oracle_Connect_Dbi_Nls_Cygwin - Fatal编程技术网

从Perl连接到Oracle

从Perl连接到Oracle,perl,oracle,connect,dbi,nls,cygwin,Perl,Oracle,Connect,Dbi,Nls,Cygwin,我正在尝试使用Perl连接到Oracle 我正在尝试从安装了Perl的Windows XP计算机进行连接。我还下载了Oracle SQL Developer和Oracle Instant Client。我可以使用Oracle SQL Developer和TNS连接类型连接到Oracle数据库 我使用以下Perl use DBI; $db=DBI->connect( "dbi:Oracle", "username", "password" ) or die "Can't connect $D

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

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

我使用以下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?

有了这个错误消息和您的一段代码,我首先要检查它是否有助于在
$db=DBI->connect(…
(如果需要的话,谷歌提供一些示例)的第一个参数中明确地说明Servername


如果这不起作用,我会检查环境变量OCI_NLS_CHARSET_ID的值

我使用了不同的方法将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
我也遇到了同样的问题,最终还是可以解决的

在我的案例中(经过大量调查和阅读),问题的根源在于版本的混合。服务器是11.2,同时我使用12.1即时客户端软件包为
DBD::Oracle
构建
Oracle.dll
。因此我下载了11.2版本(从),这个错误消息就消失了

我已经阅读了手册,但似乎需要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查找路径以查找dll而不是LD_LIBRARY_PATH时添加到路径中的。文件可以位于
$TNS_ADMIN
目录中,也可以位于
/var/opt/Oracle
/etc
(或某些其他位置)。定义的服务名称可以通过
DBI->data\u源列出(“Oracle”)


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

我尝试显式地声明服务器名,但仍然出现相同的错误。