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 :

Test insert delete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut Test insert delete
    bonjour,

    voilà je veux purger une table apres avoir l'historiser dans une autre table
    D'abord j insere les enregistrement récupérés à l'aide de mon curseur dans la table d archivage, apres je les supprime
    Mais il ne faut supprimer un enregistrement de la table d origine que s il est bien inserer dans la table d archivage ; j'arrive pas a faire ce test
    Remarque : faut que j'utilise le BULK COLLECT et LIMIT

    Merci bien de me repondre, c tres urgent

  2. #2
    Membre expérimenté Avatar de JerryMouse
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 215
    Par défaut
    Voici une des solutions basée sur la gestion des exceptions clé dupliquée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Ng In (Select * From Table_Origine)
    Loop
      Begin
        Insert Into Table_Cible Values(Ng.Col1,Ng.Col2....);
        -- L'insert s'est bien passé.
        Delete Table_Origine Where ......
      Exception
       --Quand Erreur d'insertion, ne rien faire
        When Dup_Val_On_Index Then Null;
      End;
    End Loop;

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut test insert delete
    Merci bien de m'avoir repondu

    pour ça c bon, mais j'ai un soucis:
    Quand j'utilise le fetch -mon_curseur- BULK COLLECT into l_rowid LIMIT &NB;
    avec NB = 1000
    et apres je fait le commit apres chaque ligne inserer et supprimer(dans la boucle for c a d), il me prend que les 1000 premier enregistrements
    Est ce que si je met le commit apres la boucle for et dans la boucle loop du fetch ça ne causera pas de problème?

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut test insert delete
    si je mets pas de commit sa prends tout les enregistrements


    remarque: j'utilse le for update skip locked dans la requete de selection de mon curseur

  5. #5
    Expert confirmé 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
    Par défaut
    Citation Envoyé par zico_pro Voir le message
    ...
    remarque: j'utilse le for update skip locked dans la requete de selection de mon curseur
    C'est une faute grave!
    Nulle besoin de bulk, etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Insert /*+ APPEND */ Into table_hist Select ... From table_del Where ...
    /
    delete table_del (ou peut être truncate)
    /
    Voilà.

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut Problème BULK COLLECT
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    DECLARE
     
     CURSOR  C1 IS
              SELECT rowid
              WHERE 
              ..
              for update skip locked;
     
     
     
    BEGIN
     
     
    	OPEN  C1;
     
    	loop     
     
    		fetch C1 BULK COLLECT into var LIMIT 1000;
     
     
    		if  (var.COUNT != 0) then
     
    		for j in 1..var.COUNT loop
     
                               begin
     
                               insert into table_archive
    			    (select ...
                                               where rowid = var(j));
     
    			    delete from table where rowid = var(j);
     
     
     
                               exception
                               when others then
                               NULL;
                               dbms_output.put_line('erreur suppression');
                               end;
     
                           end loop;
     
                     commit;
                      end if;
     
                     exit when C_stocouch%NOTFOUND;
     
                  end loop;
     
     	CLOSE  C1;
     
     
     
    EXCEPTION
     
    		WHEN OTHERS THEN
     
    		CLOSE  C_stocouch;
     
    END;





    Le probleme c'est que juste le1000 premiers enregistrements sont traités

    Merci de me repondre, c'est tres urgent

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zico_pro Voir le message
    Le probleme c'est que juste le1000 premiers enregistrements sont traités
    Merci de me repondre, c'est tres urgent
    Déjà merci de poser une question claire et de mettre ton message en forme avec la balise #...
    C'est urgent ? Eh bien tu peux faire appel à des sociétés dont c'est le travail de traiter les urgences. Les gens du forum ont aussi leurs urgences.

    Et pour ton problème que penses-tu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fetch C1 BULK COLLECT into var LIMIT 1000;

  8. #8
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Sorry Jerome, j'avais pas vu.
    Je supprime l'autre doublon.

  9. #9
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut Problème BULK COLLECT
    Mais si la requete de mon curseur ramene 2300 enregistrements, le fetch doit les traiter tous

  10. #10
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Alors pourquoi mettez-vous cette limite ?

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

Discussions similaires

  1. ADO.NET INSERT DELETE UPDATE refresh des composants graphic
    Par jeriko dans le forum Accès aux données
    Réponses: 5
    Dernier message: 15/01/2007, 15h17
  2. [JUnit] Test insertion dans DB
    Par MicroPuce dans le forum Tests et Performance
    Réponses: 6
    Dernier message: 11/11/2006, 11h22
  3. [ODBC] Faire une requête INSERT, DELETE, UPDATE
    Par avogadro dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2006, 11h35
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  5. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58

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