IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

SAS vers Oracle - Transcoding / NLS


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Février 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 10
    Points : 8
    Points
    8
    Par défaut SAS vers Oracle - Transcoding / NLS
    Bonjour,

    Je sollicite la communauté car je ne parviens pas à résoudre mon problème.

    Je créé une table dans la Work contenant un champs texte qui contient un mot avec un accent. Lorsque j'envoi cette table dans une base Oracle avec une procédure SQL, puis que j'affiche cette table, l'accent n'est pas interprété.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    LIBNAME FRDDTBR ORACLE  PATH=XXXXXXXX  USER=XXXXXXX  PASSWORD="{sas002}XXXXXXXXXXX" ;
     
    data toto;
        test="éric";
    run;
     
    PROC SQL;
        drop table FRDDTBR.toto; /* si table déjà présente */
        create table FRDDTBR.toto as select * from toto;
    quit;
     
    proc metalib;
         omr (library = "Fraud Data Base REC" );
         select (toto);
    run;
    Ci-dessous la table affichée dans la Work :
    Nom : WORK_TOTO.png
Affichages : 633
Taille : 1,1 Ko

    Ci-dessous la table affichée dans la base Oracle:
    Nom : ORACLE_TOTO.png
Affichages : 647
Taille : 1,2 Ko

    Ci-dessous le résultat de la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql;
    	select * from FRDDTBR.nls_session_parameters;
    	select * from FRDDTBR.nls_database_parameters;
    quit;
    Nom : NLS_PARAMETERS.png
Affichages : 929
Taille : 34,7 Ko

    Le fichier sasv9_usermods.cfg contient l'option : -locale = Frenche_France .

    Je ne peux pas me permettre de modifier les fichiers de config car il y a énormément de traitements déjà en place qui utilisent des bases Oracle. Nous ne pouvons mesurer l'impact potentiel d'une modification. La seule piste que je possède actuellement est celle de SAS/CONNECT. Pourrait-on faire appel à un autre fichier de config dans la session ? ?

    Je précise que le programme sera exécuté par des utilisateurs standards, les commandes X sont désactivées par sécurité.

    J'ai essayé avec l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    options set = NLS_LANG "French_France.we8iso8859p1";
    options set = LANG "fr_FR";
    Ces instructions créées 2 variables d'environnement mais lorsque je relance le traitement initial, le problème n'est pas résolu. La session SAS par défaut est en ENCODING LATIN9.

    Un article datant de 2012 au lien suivant parlant d'un problème de TRANSCODING pourrait-être utile :
    http://studysas.blogspot.fr/2012/02/...ngwlatin1.html

  2. #2
    Membre actif
    Inscrit en
    Juillet 2010
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 199
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    Tu peux essayer de modifier l'encoding de ta table et voir ce que ça donne comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      PROC DATASETS NOLIST LIBRARY=work;
        MODIFY toto / CORRECTENCODING=ASCIIANY ;
      RUN;QUIT;
    Tu peux aussi essayer avec CORRECTENCODING=UTF8.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Février 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci pour la réponse apportée mais cela produit le même résultat

    En parallèle j'ai essayé quelque chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    /* creation variables d'environnement */
    options set = NLS_LANG "French_France.we8iso8859p15";
    options set = LANG "fr_FR";
     
    options autosignon=yes sascmd="/app/sas/products/SASFoundation/9.3/sas" ;
     
    rsubmit process=task1 wait=no  ;
     
    	LIBNAME FRDDTBR ORACLE  PATH=XXXXXXXX  USER=XXXXXXXX  PASSWORD="{sas002}XXXXXXXXXXXXXXX" ;
     
    	options set = NLS_LANG "French_France.we8iso8859p15";
    	options set = LANG "fr_FR";
     
    	%Put NLS_LANG = %sysget(NLS_LANG);
    	%Put LANG = %sysget(LANG);
     
    	data toto;
    		test="éric";
    	run;
     
    	PROC SQL;
    		drop table FRDDTBR.toto;
    		create table FRDDTBR.toto as select * from toto;
    	quit;
     
    endrsubmit task1;
     
    waitfor _all_ task1 ;
    signoff task1;
     
    proc metalib;
    	omr (library = "Fraud Data Base REC" );
    	select (toto);
    run;
    Résultat de la table TOTO dans Oracle après la première et la seconde exécution :
    Nom : ORACLE_TOTO_first.png
Affichages : 820
Taille : 1,2 Ko

    Fermeture de la session SAS puis réouverture d'une nouvelle session, affichage de la table dans Oracle sans avoir exécuté de programme :
    Nom : ORACLE_TOTO_new.png
Affichages : 820
Taille : 1,2 Ko

    exécution du programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    options set = NLS_LANG "French_France.we8iso8859p15";
    options set = LANG "fr_FR";
    Affichage de la table dans Oracle :
    Nom : ORACLE_TOTO_new.png
Affichages : 820
Taille : 1,2 Ko

    Exécution du programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    /* Définition variables d'environnement pour toute la durée de cette session */
    options set = NLS_LANG "French_France.we8iso8859p15";
    options set = LANG "fr_FR";
     
    /* Création d'une session distante grâce au multi-processing */
    options autosignon=yes sascmd="/app/sas/products/SASFoundation/9.3/sas -noautoexec";
     
    rsubmit process=task1 log=purge wait=no ;
     
    	%Put session distante actualise parametres de session ;
     
    endrsubmit task1;
     
    waitfor _all_ task1 ;
    signoff task1;
     
    /* Masquer les infos du LIBNAME */
    options nosource nosource2 ;
     
    LIBNAME FRDDTBR ORACLE  PATH=XXXXXXXXX  USER=XXXXXXXXXXX  PASSWORD="{sas002}XXXXXXXXXXXXXXXX" ;
     
    options source source2 ;
     
    %Put NLS_LANG = %sysget(NLS_LANG);
    %Put LANG = %sysget(LANG);
     
    data toto;
    	test="éric";
    run;
     
    PROC SQL;
    	drop table FRDDTBR.toto;
    	create table FRDDTBR.toto as select * from toto;
    quit;
     
    proc metalib;
    	omr (library = "Fraud Data Base REC" );
    	select (toto);
    run;
    Affichage de la table dans Oracle :
    Nom : ORACLE_TOTO_first.png
Affichages : 820
Taille : 1,2 Ko

    Très bizarre !
    A priori, SAS agirait en 2 temps :
    1. Déclaration des variables d'environnement et exécution du code
    2. L'intégration de ces variables se ferait grâce au changement de session qui semble "actualiser" les paramètres de la session


    C'est la "solution" la plus aboutie que je possède actuellement.
    S'il y a une commande permettant "d'actualiser" ces paramètres de session plutôt que d'en créer une puis de la killer, je suis preneur.

Discussions similaires

  1. Acceder à une base Oracle derrière un firewall ODBC error 1004
    Par Holly Smoke dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/09/2015, 15h33
  2. Problleme de connection ADO sur base Oracle
    Par poirier dans le forum ASP
    Réponses: 7
    Dernier message: 08/06/2004, 09h34
  3. Réponses: 3
    Dernier message: 17/05/2004, 17h28
  4. Tranfert de données d'une base Oracle vers PostGre
    Par Elois dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/01/2004, 18h08
  5. XML et Base Oracle
    Par YESSOTHEO dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 27/10/2003, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo