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

Administration Oracle Discussion :

[trigger] Modifier la valeur "nls_numeric_characters"


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Par défaut [trigger] Modifier la valeur "nls_numeric_characters"
    Bonjour,

    J'ai un petit problème concernant un trigger. J'ai plusieurs procédure récupérant des données de type varchar2. Quelques unes de ces données sont en réalité des nombres dont certain possèdent des décimales. Ces données sont formater avec un '.' en séparateur décimale. Naturellement lorsque je tentais d'insérer la donnée dans une colonne de type number, le code pl/sql me retournait une erreur (puisque ma config oracle est basé sur la ',' en séparateur décimale).

    Pendant un temps j'ai résolu le problème en alterant la variable "nls_numeric_characters". J'ai même utilisé dans ma procédure la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBMS_SESSION.set_nls ('NLS_NUMERIC_CHARACTERS', '''.,''');
    Jusque là tout fonctionnait sans problème. Sauf que récemment j'ai du écrire un trigger qui appellait cette procédure et plusieurs autres du même genre. J'ai placé la ligne de code ci dessus au début du trigger. Mais Oracle n'aprécie pas cette ligne et lève donc une erreur.

    Ma question est donc : Existe il une autre manière de changer le séparateur décimale et qui fonctionnerait dans un trigger (et serait valable seulement le temps de ce trigger) ?

    Merci d'avance !

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Peut-être en faisant un to_number et précisant le nls_numeric_characters :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_number ('1.235', '9999999999999D9999999999', 'nls_numeric_characters=''. ''') from dual;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Par défaut
    Salut.

    Tout d'abord merci pour ta réponse qui fonctionne parfaitement.

    Cependant je voulais savoir s'il n'y avait pas une manière de procéder plus "simple" en changeant la valeur "NLS_NUMERIC_CHARACTERS" comme je l'avais fait dans ma procédure ou si justement j'étais obligé d'utiliser la fonction to_number() sur chaque numérique concernés.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE('alter session set nls_numeric_characters= ..');
    doit aussi fonctionner mais nécessite d'avoir le privilège ALTER SESSION accordé directement (pas par un rôle).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Par défaut
    Merci de ta réponse pifor, cependant cela ne semble pas fonctionner, j'obtiens l'erreur suivante :

    ORA-02096: specified initialization parameter is not modifiable with this option
    Cela aurait il un rapport avec la limitation des droits ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Non. C'est bien ALTER SESSION qu'il faut utiliser et pas ALTER SYSTEM.
    Quelle est la version d'Oracle ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. trigger pour modifier une valeur après création du record
    Par awalter1 dans le forum Administration
    Réponses: 5
    Dernier message: 07/03/2011, 18h41
  2. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26

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