Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Configurando parâmetros de linguagem Oracle para DG4ODBC


Em resposta às consultas dos clientes, este documento descreve como definir o HS_LANGUAGE e HS_NLS_NCHAR parâmetros ao usar DG4ODBC.

Se você estiver usando um driver ODBC Unicode, como o driver ODBC do SQL Server, certifique-se de que esses parâmetros e valores estejam presentes em seu arquivo init DG4ODBC:
HS_LANGUAGE = language_territory.code_page
HS_NLS_NCHAR = UCS2

Substituir idioma , território e code_page com o idioma, território e página de código da Oracle® que correspondem ao idioma, localidade e página de código de seus bancos de dados.

Por exemplo, se seu banco de dados for SQL Server e seu idioma e página de código forem English (United States) e 1252 , seu HS_LANGUAGE parâmetro ficaria assim:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252

O HS_NLS_NCHAR O valor do parâmetro informa ao DG4ODBC para passar dados codificados em UCS-2 para as APIs ODBC Unicode, que é a codificação de caracteres que os estados padrão ODBC devem ser usados ​​e, portanto, é aquela que o Gerenciador de driver unixODBC espera.

Certifique-se também de ter definido NLS_LANG antes de iniciar seu aplicativo Oracle®. NLS_LANG permite que o Oracle® saiba qual conjunto de caracteres sua máquina cliente está usando. Por exemplo:
$ echo $LANG
en_US.UTF-8
$ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus

Se você estiver usando um driver ODBC ANSI (que não suporta chamadas de API ODBC amplas), precisará especificar um conjunto de caracteres não UTF-8 no HS_LANGUAGE valor. Por exemplo, HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1 . Se você não fizer isso e o NLS_CHARACTERSET do seu banco de dados Oracle® valor é definido para uma codificação UTF-8, por exemplo AL32UTF8 , DG4ODBC:
  • Usa as APIs ODBC Unicode, por exemplo, SQLDriverConnectW , que o Gerenciador de Driver unixODBC mapeia para seu equivalente ANSI (ou se seu HS_FDS_SHAREABLE_NAME parâmetro aponta para o objeto compartilhado do driver ODBC, faz com que a conexão falhe com um erro de "símbolo indefinido").
  • Passa dados codificados em UTF-8 para as APIs ODBC, que o Gerenciador de Driver unixODBC não oferece suporte. A conexão falha porque DG4ODBC passa uma string de conexão codificada em UTF-8 para SQLDriverConnectW , que o gerenciador de driver unixODBC não consegue manipular.

Drivers ODBC Unicode


Os drivers ODBC Unicode suportam as APIs ODBC amplas, que estão no formato SQLxxxW. Para verificar se o driver ODBC oferece suporte a APIs ODBC amplas, verifique com o fornecedor do driver ou habilite o log do driver ODBC, conecte-se ao DG4ODBC e examine o arquivo de log resultante. Por exemplo:
$ more /etc/odbc.ini
[SQLSERVER_SAMPLE]
.
.
.
Logging=Yes
LogFile=/tmp/mssql.log

$ ./sqlplus / as sysdba
$ select * from mytable@mssqllink;
$ exit
$ more /tmp/mssql.log
.
.
.
ENTRY:   SQLGetInfoW: connection_handle...