Я пытаюсь подключиться к удаленной базе данных Oracle в моем приложении perl. При запуске приложения появляется следующее сообщение об ошибке:Ошибка подключения DBI: ERROR OCINlsEnvironmentVariableGet (OCI_NLS_CHARSET_ID)
DBI connect('//XXX.XXX.XXX.XXX:1522/TEST','user','password')
failed: ERROR OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID)
Check NLS settings etc. at App.pm line 28.
Мой App.pm
package App;
use strict;
use warnings;
use DBI;
my $instance = undef;
BEGIN {
$ENV{OCI_NLS_CHARSET_ID} = "AMERICAN_AMERICA.CL8MSWIN1251";
$ENV{ORACLE_HOME} = "path";
}
sub get_instance {
$instance = bless {}, shift unless $instance;
return $instance;
}
sub new {
my ($caller) = @_;
my $class = ref($caller) || $caller;
return get_instance($class);
}
sub connect {
my $self = shift;
$self->{dbh} = DBI->connect('dbi:Oracle://XXX.XXX.XXX.XXX:1522/TEST', 'user', 'password');
}
sub DESTROY {
my $self = shift;
$self->{dbh}->disconnect if $self->{dbh};
}
1;
NLS_PARAMETERS:
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET CL8MSWIN1251
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected
Я использую ActiveStat Perl на Windows 7. сервера ORACLE 11.2.0.2.0 x64 в Windows 2003. DBI 1.634. DBI-Oracle 1.74.
На сервере приложение успешно работает.
I Используйте Мгновенный клиентский пакет. Загружен с http://www.oracle.com/technetwork/topics/winsoft-085727.html для версии 11.2.0.2.0 (Instant Client Package - Basic: все файлы, необходимые для запуска приложений OCI, OCCI и JDBC-OCI) –
На сервере приложение успешно завершено –
сервер содержит «полный» толстый клиент, который поддерживает все кодировки. – ibre5041