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

SQL Oracle Discussion :

Ajouter des zéros au moment d'enregistrer un objet java


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Ajouter des zéros au moment d'enregistrer un objet java
    Bonjour,
    j'aimerais pouvoir ajouter des zéros à l'id d'une personne au moment de l'enregistrement (insert). Le nombre de chiffres de l'id doit être de 4.
    Exemple:
    id nom prénom
    0001 n1 p1
    0002 n2 p2

    PS: j'ai vu qu'il était possible avec LPAD mais seulement dans un select.

    Comment pourrais-je réaliser cela ?

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    ID est un varchar2 ?

    Si oui, alors il suffit de le mettre dans un trigger sur la table en before insert for each rows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER nomtrig   
      BEFORE INSERT ON nomtable               
      FOR EACH ROW
    BEGIN   
      :new.id := LPAD(:new.id, 4, '0');
    END;

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    C'est génial ce code McM, je ne savais pas qu'on pouvait juste modifier la valeur d'une colonne via un trigger avant que Oracle fasse son opération.

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Euh.. bein.. c'est la base des triggers, non ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ne serait-ce pas plutôt :new.id := lpad(:old.id, 4, '0'); ?
    Ou c'est que pour les updates peut-être, j'ai un doute.

  6. #6
    Invité
    Invité(e)
    Par défaut
    En réponse à Waldar, d'après le site d'oracle une restriction sur before trigger: il est possible d'écrire sur la valeur :NEW mais pas sur la valeur :OLD. Si c'est bien ça que tu demandais
    Merci de ta réponse McM mais je pense que ma synthaxe n'est pas correct: [SQL0628] clauses incorrectes dans la même définition

    Pour être sûr, ceci est à titre d'exemple:
    mon objet Java Personne possède les attributs : idPersonne, nom, prenom et ma table PersonneTable : id, nom, prenom-> id est bien en varchar2

    et pour préciser, j'utilise le framework MyBatis pour une application web ce qui signifie les "#personne." -> c'est le nom de mon objet que je fais passer en paramètre d'une méthode java pour faire appel à ma méthode sql.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER trig
      BEFORE INSERT ON PersonneTable 
      FOR EACH ROW
    BEGIN   
      :new.id := LPAD(:new.id, 4, '0');
      INSERT INTO PersonneTable (id, nom, prenom) VALUES (#personne.idPersonne, #personne.nom, #personne.prenom);
    END;
    2 questions pour le code:
    - sur la ligne LPAD, id est-il bien mis pour signifier le nom de ma table ?
    - insert into est-il bien placé ?

  7. #7
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Citation Envoyé par McM Voir le message
    Euh.. bein.. c'est la base des triggers, non ?
    Non mais c'est pas ça
    Quand je fais des triggers, je fais une action (genre je trace dans une vue l'action du user, la date etc etc). Là on modifie juste une valeur car on estime qu'elle est incorrecte puis on laisse Oracle continuer son code.
    Je trouve ça cool.

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    On s'en sert aussi beaucoup pour forcer des valeurs par défaut (défaut dans le sens NULL.. et non pas dans le sens DEFAULT des colonnes lors de la création de table)

Discussions similaires

  1. [PHP 5.1] Ajouter des zéros significatifs
    Par nicoaix dans le forum Langage
    Réponses: 2
    Dernier message: 09/03/2011, 12h16
  2. Ajouter des zéros dans des colonnes numériques
    Par Najua dans le forum SAS Base
    Réponses: 7
    Dernier message: 10/01/2011, 18h22
  3. ajouter des zéro devant un nombre décimal
    Par les4c77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/02/2010, 17h22
  4. Ajouter des zéro à gauche dans un int
    Par abbd dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/02/2009, 21h25
  5. VBA excel: Ajouter des zéros après une virgule
    Par kimai81 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/02/2008, 21h54

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