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 :

PB sur UPDATE


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut PB sur UPDATE
    Bonjour à tous.

    Voici ce qui m'amène, je tente cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    update JDCQ_TBOD99TC_GTS S --131 574 lignes
    set       IDINTGTC = (
    select IDINTGTC
    from ODS.TBOD99TC T -- 53 043 lignes
    where S.NOCTRCAD   = T.NOCTRCAD
      and       S.COTYP         = T.COTYP
      and       S.IDGARGEN   = T.IDGARGEN
      and       S.COCAT         = T.COCAT
      and       S.COTRA         = T.COTRA
      and       S.TYSTRTAR    = T.TYSTRTAR
      and       NVL(S.TYAPPCOT,'S')   = T.TYAPPCOT
      and       S.INGROTARAJO         = T.INGROTARAJO
      and       T.FLDERIMG    = 1
      and       T.DTFINIMA      = to_date ('12-31-9999', 'mm-dd-yyyy'))
    Le SELECT ne ramène rien, l'UPDATE ne se réalise pas.

    Le problème est qu'Oracle est dans les choux, rien ne se passe.

    Je ne comprends pas.

  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
    Oracle bouffe 50 K lignes avant que vous avez eu le temps de taper le commit et Carriage Return. Donc je pense que vous est plutôt bloqué dans votre update par un autre processus.

  3. #3
    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
    1. L'update se fait sur toutes les lignes de JDCQ_TBOD99TC_GTS, le sous select est-il optimisé ? Vérifier l'explain plan si un index est bien pris.
    2. Oracle est dans les choux et rien ne se passe ..
      Vérifier les locks
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à vous.

    J'ai ajouté un index sur toutes les colonnes de la clause WHERE de la table imbriquée.
    Je ne pensais pas au vu de la volumétrie avoir à positionner cet index.

  5. #5
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par JackyD Voir le message
    Bonjour à tous.

    Voici ce qui m'amène, je tente cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    update JDCQ_TBOD99TC_GTS S --> 131 574 lignes
    set       IDINTGTC = (
    select IDINTGTC
    from ODS.TBOD99TC T --> 53 043 lignes
    where S.NOCTRCAD   = T.NOCTRCAD
      and       S.COTYP         = T.COTYP
      and       S.IDGARGEN   = T.IDGARGEN
      and       S.COCAT         = T.COCAT
      and       S.COTRA         = T.COTRA
      and       S.TYSTRTAR    = T.TYSTRTAR
      and       NVL(S.TYAPPCOT,'S')   = T.TYAPPCOT
      and       S.INGROTARAJO         = T.INGROTARAJO
      and       T.FLDERIMG    = 1
      and       T.DTFINIMA      = to_date ('12-31-9999', 'mm-dd-yyyy'))
    Le SELECT ne ramène rien, l'UPDATE ne se réalise pas.

    Le problème est qu'ORACLE est dans les choux, rien ne se passe.

    Je ne comprends pas
    Ne serait-il pas mieux de faire votre update en deux étapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select IDINTGTC
    into v_idintgtc
    from ODS.TBOD99TC T --> 53 043 lignes
    where S.NOCTRCAD   = T.NOCTRCAD
      and       S.COTYP         = T.COTYP
      and       S.IDGARGEN   = T.IDGARGEN
      and       S.COCAT         = T.COCAT
      and       S.COTRA         = T.COTRA
      and       S.TYSTRTAR    = T.TYSTRTAR
      and       NVL(S.TYAPPCOT,'S')   = T.TYAPPCOT
      and       S.INGROTARAJO         = T.INGROTARAJO
      and       T.FLDERIMG    = 1
      and       T.DTFINIMA      = to_date ('12-31-9999', 'mm-dd-yyyy');
    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update JDCQ_TBOD99TC_GTS S --> 131 574 lignes
    set       IDINTGTC = v_idintgtc;
    Cela évitera aussi de locker la table DCQ_TBOD99TC_GTS trop longtemps
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je ne peux mettre en place cette solution, car je perds la synchro entre la table en UPDATE et la table imbriquée

  7. #7
    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
    Citation Envoyé par JackyD Voir le message
    Merci à vous.

    J'ai ajouté un index sur toutes les colonnes de la clause WHERE de la table imbriquée.
    Je ne pensais pas au vu de la volumétrie avoir à positionner cet index.
    Et bien, c'est normal, tu fais un update sur 131000 lignes, et pour chaque ligne il va récupérer des infos. Donc 130.000 fois un full de 50.000 lignes, ça fait beaucoup

    PS : Sujet résolu ou pas ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    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
    Citation Envoyé par McM Voir le message
    ...Donc 130.000 fois un full de 50.000 lignes, ça fait beaucoup
    C'est ça.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 60
    Points
    60
    Par défaut
    Le code suivant aurait peut etre corrige le tir sans avoir recours aux index.

    Code sql : 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
     
    UPDATE (
    SELECT s.IDINTGTC,
           t.IDINTGTC new_IDINTGTC
    FROM  
           JDCQ_TBOD99TC_GTS S, --131 574 lignes
           ODS.TBOD99TC T
    WHERE S.NOCTRCAD   = T.NOCTRCAD
      AND       S.COTYP         = T.COTYP
      AND       S.IDGARGEN   = T.IDGARGEN
      AND       S.COCAT         = T.COCAT
      AND       S.COTRA         = T.COTRA
      AND       S.TYSTRTAR    = T.TYSTRTAR
      AND       NVL(S.TYAPPCOT,'S')   = T.TYAPPCOT
      AND       S.INGROTARAJO         = T.INGROTARAJO
      AND       T.FLDERIMG    = 1
      AND       T.DTFINIMA      = to_date ('12-31-9999', 'mm-dd-yyyy')
    	)
    SET IDINTGTC = new_IDINTGTC

    Je n'ai pas tester la requete en question et je serai curieux de savoir ce que cela vous evoque.

  10. #10
    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
    Euh.. si t'as pas d'index, comment Oracle va faire la jointure ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. [VB.NET] Pb sur update à partir champs Textbox
    Par patdez dans le forum ASP.NET
    Réponses: 5
    Dernier message: 28/06/2006, 09h28
  2. [MySQL] pb sur update
    Par yayacameleon dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/11/2005, 16h32
  3. Réponses: 1
    Dernier message: 06/10/2005, 10h09
  4. lock sur update
    Par jacques trepp dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/06/2005, 10h36
  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