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 :

boucle PL\SQL de mise à jour d'un champ


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut boucle PL\SQL de mise à jour d'un champ
    Bonjour,
    J'ai récupéré le code suivant d'une base de données ACCESS et je souhaiterais le mettre à jour pour un base Oracle (dans un bloc PL\SQL ou autre solution).

    Merci beaucoup à tous pour vos idées...
    MarieO

    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
     
    ReqSQL = "SELECT [DMI_FINESS], [DMI_NUMRSA], [DMI_CODE], count(*) FROM [MCO_DMI] " & _
               "GROUP BY [DMI_FINESS], [DMI_NUMRSA], [DMI_CODE] HAVING count(*)<>1;"
      Set rs = CurrentDb.OpenRecordset(ReqSQL)
      While Not rs.EOF
        ReqSQL1 = "SELECT * FROM [MCO_DMI] WHERE [DMI_NUMDMI] = 1 AND " & _
                     "[DMI_FINESS]=" & Chr(34) & rs.Fields(0).Value & Chr(34) & " AND " & _
                     "[DMI_NUMRSA]=" & rs.Fields(1).Value & " AND " & _
                     "[DMI_CODE]=" & Chr(34) & rs.Fields(2).Value & Chr(34) & ";"
        Set rs1 = CurrentDb.OpenRecordset(ReqSQL1)
        i = 0
        While i <= rs.Fields(3).Value And Not rs1.EOF
          i = i + 1
          rs1.Edit
          rs1!DMI_NUMDMI = i
          rs1.Update
          rs1.MoveNext
        Wend
        rs1.Close
        rs.MoveNext
      Wend
      rs.Close

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    A priori je dirais un truc comme ça (a vérifier bien sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    BEGIN
    	FOR rs IN (SELECT DMI_FINESS, DMI_NUMRSA, DMI_CODE, COUNT(*) nb FROM MCO_DMI
               GROUP BY DMI_FINESS, DMI_NUMRSA, DMI_CODE HAVING COUNT(*) <> 1)
      LOOP         
    		UPDATE MCO_DMI
        set dmi_numdmi = ROWNUM
        WHERE DMI_NUMDMI = 1 
        AND DMI_FINESS = rs.DMI_FINESS
        AND DMI_NUMRSA = rs.DMI_NUMRSA
        AND DMI_CODE = rs.DMI_CODE 
        AND ROWNUM <= rs.nb;
      END LOOP;
      COMMIT;
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    je t'ai préparé cette procédure, essaye la et tu me rends la réponse.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    create or replace procedure test as
      cursor ReqSQL is
        SELECT DMI_FINESS, DMI_NUMRSA, DMI_CODE, count(*) compte
          FROM MCO_DMI
         GROUP BY DMI_FINESS, DMI_NUMRSA, DMI_CODE
        HAVING count(*) <> 1;
      CURSOR ReqSQL1(p_0 number, p_1 varchar2, p_2 varchar2) IS
        SELECT *
          FROM MCO_DMI
         WHERE DMI_NUMDMI = 1
           AND DMI_FINESS =  p_0        
           AND DMI_NUMRSA = p_1
           AND DMI_CODE =  p_2 ;
     
      i number;
    begin
     
      for RS in ReqSQL loop
        --
        begin
          i := 0;
          for Rs1 in ReqSQL1(Rs.Dmi_Finess, Rs.Dmi_Numrsa, Rs.Dmi_Code) loop
            --
            begin
              i := i + 1;
     
              UPDATE MCO_DMI set DMI_NUMDMI = i
              WHERE DMI_FINESS  = Rs.Dmi_Finess 
              AND DMI_NUMRSA    = RS.Dmi_Numrsa 
              AND DMI_CODE        = Rs.Dmi_Code ;
     
    commit
            end;
          end loop;
     
        end;
      end loop;
     
    end test;
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

Discussions similaires

  1. Transact-SQL et mise à jour de TABLE
    Par samworld dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2007, 13h20
  2. Réponses: 9
    Dernier message: 03/05/2007, 15h09
  3. Requête SQL de mise à jour
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 24/11/2006, 13h44
  4. Problème SQL SAGE Mise à jour
    Par yancimer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2006, 21h35
  5. [T-SQL] Mise à jour d'un champ classement
    Par Djerry dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/05/2006, 08h42

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