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 :

Oracle 10g : Question sur un MERGE


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Par défaut Oracle 10g : Question sur un MERGE
    Bonjour,

    J'ai un script en PL/SQL qui est executé toutes les nuits pour alimenter une table à partir d'une autre table.

    Aujourd'hui mon script a généré une erreur notamment sur un MERGE.
    Le code d'erreur généré par Oracle est :
    ORA-30926: unable to get a stable set of rows in the source tables
    Et comme texte d'erreur, il me dit qu'il y a 0 lignes traitées dans le MERGE.

    En regardant le code de la fonction qui utilise le MERGE, je ne vois pas pourquoi il ne traite aucune ligne.

    Ma question est donc de savoir dans quel cas un merge n'est pas traité?

    Dans le ON du MERGE :
    ...using(...) on (t.ag_group_id = g.group_id)

    J'ai fais un count (*) from t et un count (*) from g
    J'obtiens
    t : 1154 lignes
    g: 1155 lignes

    Est ce que ceci peut jouer sur l'erreur ?

    Merci

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    http://www.developpez.net/forums/sho....php?p=2494036

    avec la requête ce serait plus simple

  3. #3
    Membre expérimenté Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Par défaut
    J'ai déjà vu ce post en faisant une recherche, mais ce n'est pas un problème sur le code puisque le script fonctionnait jusqu'à présent.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ca dépend du contenu des données donc effectivement ça a pu marcher : http://oraclequirks.blogspot.com/200...and-merge.html

    En gros, la jointure ne doit pas pouvoir ramener plus d'une ligne pour chaque ligne de ta table

  5. #5
    Membre expérimenté Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Par défaut
    merci pour ta réponse j'ai trouvé la cause de l'erreur :

    Dans le ON du MERGE :
    ...using(...) on (t.ag_group_id = g.group_id)

    J'ai constaté qu'il y a :
    1 fois le numéro 3515 pour t.ag_group_id
    2 fois le numéro 3515 pour g.group_id

    Donc dans la ligne du merge j'aurai 2 fois 3515 = 3515, ce qui retourne donc plus d'une ligne pour la ligne de la table, n'est ce pas?

    Maintenant comment je peux changer mon SQL pour qu'il le prend en compte sans changer les valeurs de la base de données?

    Peut être avec un max() de quelquechose pour qu'il ne prend qu'une seule valeur.
    Est t'il possible d'utiliser un "max" dans le "on" du "merge"
    ...using(...) on (t.ag_group_id = max(g.group_id))

  6. #6
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Bonjour,
    Merci pour le dernier post qui m'a permis de résoudre mon problème.
    Pour la question en suspend, pour ma part, j'ai juste effectuer un distinct dans le using car c'était 2 fois la même ligne (pour la partie de données concernées).
    Sinon oui, un group by pourrait être nécessaire.

    OK, je suppose que c'est résolu vu la date mais c'est plus pour remercier

Discussions similaires

  1. Oracle 10g - calcul sur les dates
    Par themateo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/08/2007, 10h50
  2. [Oracle 10g] Question sur les sous-requetes
    Par hotkebab99 dans le forum Oracle
    Réponses: 2
    Dernier message: 27/10/2006, 11h25
  3. [FORMS 10g] Question sur le TRI
    Par TheNerdPhreak dans le forum Forms
    Réponses: 1
    Dernier message: 10/07/2006, 18h19
  4. [ORACLE 9i] Question sur le cascade constraints
    Par Misdrhaal dans le forum Oracle
    Réponses: 5
    Dernier message: 16/05/2006, 11h09
  5. Install Oracle 10g R2 sur Mandrake 10.1 ORA-12547
    Par jellox dans le forum Installation
    Réponses: 1
    Dernier message: 22/10/2005, 16h23

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