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

 Oracle Discussion :

Copie dans une nouvelle table et concaténation


Sujet :

Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Copie dans une nouvelle table et concaténation
    Bonjour,

    Je crée une nouvelle table contenant une concaténation de 2 élément d'une autre table via la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create table cli as select idclient, codepost || ' ' || ville as codeville
    From client;
    Codepost est un number(5) et ville un varchar(20) dans la table client. Codeville est créé en tant que varchar2(61).
    Savez-vous pourquoi? Est-il possible de modifier la commande initiale pour que le codeville soit un varchar2(26) ?
    Ca pourra me servir dans le futur.

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Je n'en suis pas sûre, mais je dirai bien que le problème vient de la conversion implicite. Tentez une conversion explicite...

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci, c'était bien ça. Le number(5) était converti en varchar2(40).
    Si je remplace codepost par le code suivant dans la commande cela fonctionne mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(codepost, '99999')
    C'est alors un varchar2(27).

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Par curiosité, pourquoi faites vous cela ?

    Pourquoi ne créez vous pas plutôt une vue ? car si l'un de vos clients change de ville ou de code postal, votre table cli ne sera plus à jour...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Parce que je suis en train de m'auto former à sql/oracle et qu'il s'agissait d'un exercice. Par contre rien ne demandait un varchar2(26) dans l'exo, je me donne des tâches supplémentaires .
    L'intérêt de la table cli est effectivement très limité. A part avoir une copie d'une table à un instant t, je ne vois pas l'intérêt.

    Je suis en train de regarder les vues maintenant qui sont plus appropriée en cas de modification. Mais je ne pense pas qu'on puisse concaténer plusieurs colonne dans une vue ...
    Dernière modification par al1_24 ; 12/04/2013 à 15h22. Motif: Citation inutile

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Beginner.j Voir le message
    Je suis en train de regarder les vues maintenant qui sont plus appropriée en cas de modification. Mais je ne pense pas qu'on puisse concaténer plusieurs colonne dans une vue ...
    Si, une vue est le résultat d'une requête...

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai une erreur si j'essaie de modifier codeville dans la vue
    C'est bien ce que je pensais. Par contre si on modifie codepost dans la table d'origine c'est bien modifié dans la vue.
    Dernière modification par al1_24 ; 12/04/2013 à 16h08. Motif: Citation inutile

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Dans ce cas, effectivement, pour insérer dans la vue, il faut placer un trigger INSTEAD OF sur la vue, lequel va se charger de découper le code postal de la ville pour insérer correctement dans la table sous jacente... ou insérer directement dans la table

  9. #9
    Invité
    Invité(e)
    Par défaut
    Les trigger ont l'air intéressant à utiliser.
    Par contre j'ai du mal à cerner comment il pourrait prendre le codeville de la vue pour mettre à jour codepost et ville dans la table. Je vois comment extraire les 2 derniers du premier en dehors du trigger, mais dans le trigger aucune idée.

    Aurais-tu un lien à me proposer sur les trigger? Où un exemple simple? Je n'ai trouvé que des exemples trop complexes pour moi avec google.

  10. #10
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Citation Envoyé par Beginner.j Voir le message
    Aurais-tu un lien à me proposer sur les trigger? Où un exemple simple? Je n'ai trouvé que des exemples trop complexes pour moi avec google.
    Quel est votre SGBD ?
    A bove ante, ab asino retro, a stulto undique caveto

  11. #11
    Invité
    Invité(e)
    Par défaut
    C'est un serveur oracle

    [Edit]Je viens de trouver ça: http://sheikyerbouti.developpez.com/pl_sql/?page=Chap6
    Je pense que ça va m'aider, mais je ne serais pas contre un petit exemple
    Dernière modification par Invité ; 12/04/2013 à 19h25.

  12. #12
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    A bove ante, ab asino retro, a stulto undique caveto

  13. #13
    Invité
    Invité(e)
    Par défaut
    J'avais oublié le donc je ne comprenais pas pourquoi ça ne marchait pas au début XD

    Dans un de tes liens il y a un exemple de trigger before qui gère en même temps le insert, update et le delete. Je me le suis mis de côté après l'avoir testé car il doit être très utile en temps normal.

    Maintenant j'arrive à faire des trigger before et instead of sans trop de problème s' il ne s'agit que d'afficher des données. Par contre je dois faire une erreur dans le trigger contenant le update ..
    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
    SQL> CREATE OR REPLACE TRIGGER trigger_cli
    INSTEAD OF UPDATE
    ON cli
    BEGIN
    dbms_output.put_line( 'Code postal "' || to_number(substr(:NEW.codeville, 1,5)) || '" et ville "' || substr(:NEW.codeville, 7,20) || '"') ;
    END ;
    / *2 * *3 * *4 * *5 * *6 * *7
     
    Trigger created.
     
    SQL> UPDATE cli
    SET codeville='75006 Paris'
    WHERE idclient=2 ; *2 * *3
    Code postal "75006" et ville "Paris"
     
    1 row updated.
     
    SQL> CREATE OR REPLACE TRIGGER trigger_cli
    INSTEAD OF UPDATE
    ON cli
    BEGIN
    UPDATE client
    SET codepost = to_number(substr(:NEW.codeville, 1,5)), ville = substr(:NEW.codeville, 7,20)
    WHERE idclient = :NEW.idclient
    END ;
    / *2 * *3 * *4 * *5 * *6 * *7 * *8 * *9
     
    Warning: Trigger created with compilation errors.
     
    SQL>
    [Edit]Avec un point virgule après le NEW.idclient ça marche beaucoup mieux et le trigger fait bien ce que je veux.
    Merci pour l'aide
    Dernière modification par Invité ; 15/04/2013 à 14h30.

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

Discussions similaires

  1. Requette multicritaire avec résultat dans une nouvelle table en vb
    Par lulumars dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 15/05/2008, 22h32
  2. dupliquer des enregistrements dans une nouvelle table
    Par CINQ_MARSIENNE dans le forum Modélisation
    Réponses: 3
    Dernier message: 15/09/2007, 00h31
  3. [Requête]Stocker dans une nouvelle table une sélection de données
    Par taisherg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/04/2007, 14h58
  4. Trigger d'insertion dans une nouvelle table
    Par Marty000 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/10/2006, 17h24
  5. Réponses: 9
    Dernier message: 20/10/2006, 14h32

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