Подключение к Oracle из Perl - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь подключиться к Oracle, используя Perl.

Я пытаюсь подключиться с компьютера с Windows XP, на котором установлен Perl.Я также скачал Oracle SQL Developer и Oracle Instant Client.Я могу подключиться к БД Oracle, используя Oracle SQL Developer, используя тип подключения TNS.

Я использую следующий 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?

Ответы [ 3 ]

1 голос
/ 15 июля 2011

Я использовал другой метод для подключения Perl к БД Oracle.Я использовал SQLPlus вместо DBI.Это утилита командной строки из Oracle, которую можно вызвать из Perl.Ниже приведен пример моего кода.Файл test.sql может содержать один или несколько запросов и должен заканчиваться выходом.

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
0 голосов
/ 13 декабря 2016

У меня была такая же проблема в , и в конце ее можно было решить.

В моем случае (после долгих исследований и прочтения) выяснилось, что корень проблемы заключался в смешивании версий.Сервер был 11.2, а я использовал пакет 12.1 Instant Client для сборки Oracle.dll для DBD::Oracle.Итак, я скачал версию 11.2 (из Oracle ), и это сообщение об ошибке просто исчезло!

Я прочитал руководство Trooble Shooting , но, похоже, нужно 3 пакета: Basic, SDK и sqlplus (последний используется процессом сборки для определения версии сервера).

Перед сборкой необходимо было установить некоторые переменные bash:

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

Требуется позднеенайти oci.dll, на который ссылается Oracle.dll.Это добавляется в PATH, поскольку Windows ищет PATH, чтобы найти библиотеки DLL, а не LD_LIBRARY_PATH.Файл tnsnames.ora может быть в $TNS_ADMIN dir или /var/opt/oracle или /etc (или в некоторых других местах).Определенные имена служб могут быть перечислены как DBI->data_sources('Oracle').

И вуаля!Я надеюсь, что это может помочь!

0 голосов
/ 28 июня 2011

С этим сообщением об ошибке и вашим фрагментом кода я сначала проверю, поможет ли явным образом указать имя сервера в первом параметре $db=DBI->connect(.. (при необходимости, Google для некоторых примеров) .

Если это не поможет, я бы проверил значение переменной среды OCI_NLS_CHARSET_ID.

...