Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Contributor
Beiträge: 20
Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo,

 

ich greife vom SAS-EG direkt auf Oracle-Tabellen zu. Dabei habe ich festgestellt, dass die Umlaute nicht korrekt übernommen werden (z.B. '?' statt 'ß'). Wie stelle ich den Zeichensatz beim Zugriff von SAS auf Oracle-Tabellen ein. Die Oracle-Tabellen sind im UTF8-Format gespeichert.

 

Vielen Dank im Voraus und viele Grüße

 

Holger Pietschmann

 

 

 

Occasional Contributor
Beiträge: 13
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo,

 

haben Sie es schon mal mit einer encoding-Option im libname-Statement versucht?

 

 

Viele Grüße

Daniela Bastos Tsu

Contributor
Beiträge: 20
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo,

 

gibt es denn eine encoding-Option im LIBNAME Statement? Ich habe in der Dokumentation nämlich noch keine gefunden und ein Blind-Versuch mit ENCODING='utf8' brachte einen Syntax-Fehler.

 

Viele Grüße

 

Holger Pietschmann

Frequent Contributor
Beiträge: 118
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo Herr Pietschmann,

 

können Sie bitte näher beschreiben, was sie unter "direktem Zugriff" verstehen?

Erfolgt der Datenzugriff über OleDB oder ODBC im Enterprise Guide und nicht über die SAS Sitzung?

 

Evtl. gibt es dann im ConnectionString zur Datenbank eine Möglichkeit das Encoding festzulegen. Ohne den genauen Zugriffsweg zu kennen, kann ich ihnen an dieser Stelle leider nicht besser helfen.

 

VG, Andreas Menrath

Contributor
Beiträge: 20
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo Herr Menrath,

 

der Zugriff erfolgt über SAS/ACCESS for Oracle: 

 

libname XY ORACLE  user=abc password=def path='DB.X' SCHEMA=abc;

 

Ich habe schon die ganze, mir bekannte Dokumentation durchsucht, aber keine dafür verwendbare ENCODING-Option gefunden.

 

Viele Grüße

 

Holger Pietschmann

Frequent Contributor
Beiträge: 118
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen
Hilft ihnen diese SAS Note weiter?
http://support.sas.com/kb/51/411.html
Zumindest scheint das Problem bei SAS bekannt zu sein. Evtl. kann hier dann auch der SAS Support bei technischen Problemen weiterhelfen.
Contributor
Beiträge: 20
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Hallo Herr Menrath,

 

ganz herzlichen Dank für den offenbar entscheidenden Hinweis. Nachdem ich mir die SAS Note durchgelesen habe, habe ich an meinem lokalen PC versuchsweise einmal die Umgebungsvariable NLS_LANG = GERMAN gesetzt, und siehe da - jetzt funktioniert die Zeichencodeumsetzung im SAS EG einwandfrei.

 

Nochmals vielen Dank und viele Grüße

 

Holger Pietschmann

 

Valued Guide
Beiträge: 3.206
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen

Mit SAS-Eg haben sie ein UTF8 front-end, die dateien im Oracle sind auch UTF8.
Die frage soll sein wass da zwischen passiert. Es gibt die volgende stationen.
- SAS/Foundation (base)   es gibt ein (multibyte) utf version und ein altmodische single-byte latin1 (often English codepage)
  Mit "proc option; run;" sind alle base setting zu sehen.
- Die nächste ist en SAS/Access interface der met ein ODBC (OLE/DB) oder speciales Oracle-software communiciert


Die note 51411 ist eine setting im das bereich ODBC ausserhalb SAS.  Ähnlich ist 
http://support.sas.com/kb/31/170.html aber in deren wird auch die länge gennant. Im utf8 ist eien zeichen 1-4 bytes (mehrere) wo wir gelernt haben das ein karakter gleich ist am 1 byte. Eine advanced document ist:  

https://support.sas.com/resources/papers/Multilingual_Computing_with_SAS_94.pdf

---->-- ja karman --<-----
Occasional Contributor
Beiträge: 16
Re: Einstellung des Zeichensatzes beim Zugriff auf Oracle-Tabellen
[ Bearbeitet ]

Hallo,

oben war die Frage nach dem Einstellung des Encoding im Libname-Statement.

Das geht so:

 

libname <logischer_name> "<physikalischer_Pfad>" outencoding="utf-8";

 

z.B.:

libname DemoLib "/tmp/demo" outencoding="utf-8";

oder

libname DemoLib "C:\temp\demo" outencoding="latin1";

 

Wenn das Encoding in dem Libname-Befehl nicht zur aktuellen Session passt, dann versucht SAS die Daten entsprechend zu konvertieren. Das klappt mehr oder weniger gut.

 

Gut klappt es bei den einfachen Fällen, wie äöüund ß oder auch éèê usw..

Schlecht klappt es bei den exotischen Fällen wie „Text“ (Luxus-Gänsefüßchen) oder – (Luxus-Bindestrich bzw. Gedankenstrich, z.B. aus Word). Die könnte man mit etwas gutem Willen noch konvertieren, bisher kommt dann ein Fehler, s.u..

Gar nicht geht die Umwandlung z.B. bei den slawischen Akzenten wie z.B. Š oder Č. Leider ist SAS dann mit dieser Umwandlung dermaßen überfordert, dass ein ERROR im Log gemeldet wird und der Data-Step die Bearbeitung abbricht. Aber ohne die Info, wo das Problem liegt, z.B. in welchen Datensatz. Der Log enthält dann nur den Text:

ERROR: Some character data was lost during transcoding in the data set
       libref.datasetname. Either the data contains characters that are not
       representable in the new encoding or truncation occurred during transcoding.

Die Note 52716 beschreibt das Problem, die Lösung passt leider nicht immer, z.B. nicht bei uns.

 

Gruß Hans