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

PL/SQL Oracle Discussion :

dupliquer ligne d'une table et mettre à jour


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut dupliquer ligne d'une table et mettre à jour
    Bonjour,

    Besoin d'une astuce :

    J'ai une table, que je nomme pour l'exemple : SITUATION
    Dans cette table, je souhaites dupliquer une ligne. Je me trouverais avec ligne_old et ligne_new.
    Dans ligne_new, je souhaites mettre à jour 2 champs, sachant que la table contient une trentaine.

    Je cherche en fait une solution qui éviterait de recopier à la main l'ensemble des champs dans mon script.
    Car là je vois une solution qui consisterait à :
    1)Mettre la ligne que je souhaites dupliquer dans un curseur
    2)Effectuer un INSERT grâce aux données du curseur, en prenant soint de modifier les données souhaitées.

    Le problème est que je serais quand même obligé de saisir à la main tous les champs.

    Quelqu'un aurait-il une astuce ?

    Merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Le plus simple et donc plus efficace, est d’insérer la ligne à partir de celle qui existe en changeant les valeurs des colonnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert Into emp (empno, ename, job, mgr, hiredate, 
                     sal, comm, deptno)
    Select 1, ename, job, mgr, sysdate, 
           sal, comm, deptno
      From emp
     Where empno = 7369
    Il y en a pas mal d’outils capables de vous éviter la corvée « saisir à la main tous les champs »

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Le plus simple et donc plus efficace, est d’insérer la ligne à partir de celle qui existe en changeant les valeurs des colonnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert Into emp (empno, ename, job, mgr, hiredate, 
                     sal, comm, deptno)
    Select 1, ename, job, mgr, sysdate, 
           sal, comm, deptno
      From emp
     Where empno = 7369
    Il y en a pas mal d’outils capables de vous éviter la corvée « saisir à la main tous les champs »
    Oui, mais je n'ai pas saisi où se trouve la mise à jour dans la ligne insérée.

    En fait si je reprends ton exemple, comment mettre à jour le salaire d'un employé tout en conservant son ancien salaire (donc en conservant l'ancien enregistrement) ?

  4. #4
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    L'ordre INSERT donné par mnitu insère des nouveaux enregistrements; les enregistrements déjà existants ne sont pas modifiés.

    Si tu veux changer le salaire en fonction du job par exemple, tu fais une requête sur le principe de celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO emp (empno, ename, job, mgr, hiredate, 
                     sal, comm, deptno)
    SELECT 1, emp.ename, emp.job, emp.mgr, sysdate, 
           t.nouveau_sal, emp.comm, emp.deptno
      FROM emp, nouveaux_salaires t
     WHERE emp.empno = 7369
       AND t.job = emp.job

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Citation Envoyé par shaftJackson Voir le message
    Oui, mais je n'ai pas saisi où se trouve la mise à jour dans la ligne insérée.
    Euh... "t.nouveau_sal", ça ne te parle pas?

  6. #6
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par GoLDoZ Voir le message
    Euh... "t.nouveau_sal", ça ne te parle pas?
    ma phrase faisait référence à la réponse de mnitu.
    La réponse de xdescamp implique que les salaires soient dans une table et non dans une variable. C'est pas exactement mon cas, mais ca me donne une piste.

    Merci

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Dans mon exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    SELECT 1, emp.ename, emp.job, emp.mgr, sysdate,
    ...
    1 et sysdate remplacent les valeurs 7369 et 17/12/1980 de l'enregistrement de clé 7369 (ligne old chez vous).

  8. #8
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Dans mon exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    SELECT 1, emp.ename, emp.job, emp.mgr, sysdate,
    ...
    1 et sysdate remplacent les valeurs 7369 et 17/12/1980 de l'enregistrement de clé 7369 (ligne old chez vous).
    Ok, j'avais pas saisi ce point là !
    je teste ca Lundi et je mets à jour le thread si ca marche

  9. #9
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Ca marche nickel
    J'ai eu une frayeur car j'avais oublié de commiter, mais là c'est nickel !
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/04/2015, 11h49
  2. [MySQL] mettre a jour les lignes d'une table sur place
    Par diengkals dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/07/2013, 14h44
  3. Réponses: 1
    Dernier message: 23/05/2012, 13h32
  4. Mettre à jour plusieurs lignes d'une table
    Par beegees dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 18h09
  5. Mettre a jour plusieurs lignes d'une table
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/12/2005, 18h50

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