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 :

pl/sql curseur update entre deux tables


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 55
    Points
    55
    Par défaut pl/sql curseur update entre deux tables
    Salut à tous,

    je cherche un exemple de procedure PL/SQL qui me permetra de faire un update entre 2 tables.
    J'ai trouvé des exemples sur le Net qui ne font que le Update sur la meme table.

    Soit la table a:
    id_a, emp_a, rue_a, statut_a

    Soit la table b:
    id_b, emp_b, rue_b, statut_b

    La table a et b sont constituées de la meme maniere. La seule difference est au niveau du statut.

    Je dois faire un update sur la table b avec les valeurs issuent de la table a where statut_a = 'upd' et changer apres le staus de la table_b en table_b = 'Ins'

    Comment faire cela avec une procedure et le cuseur?

    Merci d'avance pour vos exemples.

    Fiona

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Pour comprendre
    Salut Fiona,

    Je comprends qu'il faut mettre à jour la table b.

    Les champs mis à jours sont emp_b et rue_b qui prennent les valeurs de emp_a et rue_a de la table a.

    Le rapprochement entre les tables se fait sur id_b = id_a.

    Les id concernés sont ceux des lignes pour lesquelles statut_a = 'upd'

    Est-ce bien cela ?

    Pozzo

  3. #3
    Membre du Club Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Pozzo Voir le message
    Salut Fiona,

    Je comprends qu'il faut mettre à jour la table b.

    Les champs mis à jours sont emp_b et rue_b qui prennent les valeurs de emp_a et rue_a de la table a.

    Le rapprochement entre les tables se fait sur id_b = id_a.

    Les id concernés sont ceux des lignes pour lesquelles statut_a = 'upd'

    Est-ce bien cela ?

    Pozzo
    Salut Pozzo,

    oui c'est bien cela. Je cherche un exemple en PL/SQL(Oracle 10 g) sur le Net avec un cuseur mais je ne trouve que update sur une colonne d'une meme table.

    Merci de me donner quelques exemples si vous avez. Je plante depuis
    Fiona

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Pas besoin de curseur, c'est possible en ensembliste et certainement plus rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE table_b tb
    SET (tb.emp_b, tb.rue_b, tb.statut_b) =
       (SELECT ta.emp_a, ta.rue_a, 'Ins'
        FROM table_a ta
        WHERE ta.id_a = tb.id_b
        AND ta.statut_a = 'upd')
    WHERE EXISTS (SELECT 1
                          FROM table_a ta
                          WHERE ta.id_a = tb.id_b
                          AND ta.statut_a = 'upd')
    Le WHERE EXISTS permet de limiter la mise à jour aux seuls enregistrements de la table table_b pour lesquels un rapprochement avec la table table_a a pu être fait. Sans quoi, la requête chercherait à mettre à jour tous les enregistrements, y compris ceux qui n'ont pas eu de rapprochement, ce qui la ferait planter.

  5. #5
    Membre du Club Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Salut dgi77,

    merci pour ta reponse. Mon encadreuer aimerai que j'utilise le langage PLSQL et le cuseur pour le faire.

    Merci
    Fiona

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Dommage...
    Pas le temps de faire un curseur.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut En PlSql
    Salut Fiona,

    Il existe plusieurs types de curseurs.
    Voici un exemple de code possible :

    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
     
    Declare
      -- Parcourt de la table a
      Cursor c_a Is
        Select id_a, emp_a, rue_a
          From table_a
         Where statut_a = 'upd'
         Order By id_a;
    Begin
      -- boucle sur la table a
      For c1 In c_a Loop
        -- Mise à jour de la table b sur l'id_a courant
        Update table_b Set emp_b = c1.emp_a, rue_b = c1.rue_a Where id_b = c1.id_a;
      End Loop;
    End;
    /
    Dis moi si ça colle,

    Pozzo

  8. #8
    Membre du Club Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Hallo Pozzo,

    un tres grand merci ça fonctionne. J'ai juste encore fait des petits changements.

    Merci encore
    fiona

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

Discussions similaires

  1. requête update entre deux tables
    Par evevev dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/03/2010, 19h21
  2. Réponses: 4
    Dernier message: 09/11/2007, 18h08
  3. Syntaxe Update entre deux tables
    Par lenoil dans le forum SQL
    Réponses: 5
    Dernier message: 02/10/2007, 16h12
  4. [SQL] Relations complexes entre deux tables
    Par simonoche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/06/2007, 00h23
  5. [debutant]ms sql serveur delete entre deux tables
    Par ChristopheOce dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/06/2006, 16h36

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