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

Reports Oracle Discussion :

LEFT OUTER JOIN refusé sur une colonne de formule


Sujet :

Reports Oracle

  1. #1
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut LEFT OUTER JOIN refusé sur une colonne de formule
    Bonjour,

    Dans la formule PL/SQL d'une colonne de formule que j'ai créé via le modelé de données de mon état, j'ai écrit la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  sum(montregl) into v_montant FROM sinistre s
       LEFT OUTER JOIN sinistre_regle sr
           ON (s.codeinte=sr.codeinte  and s.exersini=sr.exersini and s.numesini=sr.numesini)
           group by s.CODEINTE ,s.NUMESINI,s.EXERSINI;
    Il me signale l'erreur citation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur 103 symbole 'LEFT' rencontré à la place d'un des symboles suivants : ,;for group having intersect minus order start union where connect
    .

    Pouvez-vous m'aider là-dessus ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Quelle est votre version d'Oracle ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    bonjour,
    il manque un WHERE avant le LEFT

  4. #4
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour et merci à vous de m'avoir répondu.
    En fait Waldar ,j'utilise la version Oracle Forms et Reports 6i.


    Pour C.Langlet, je vois pas l'utilité du WHERE puisque j'a pas une autre condition.

    Donc le problème reste entier

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    l'utilite du where , c'est qu'il contient les criteres de selections ET de jointure

  6. #6
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Ok mais le problème est que quand je vais mettre le where, je ne vais plus faire une jointure externe or c'est pour ça que j'ai utilissé le LEFT OUTER JOIN.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par c.langlet Voir le message
    l'utilite du where , c'est qu'il contient les criteres de selections ET de jointure
    Révise la syntaxe du JOIN.
    http://msdn.microsoft.com/en-us/library/ms191517.aspx
    Tu constateras que tu dis une bêtise.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Exact !
    Désolé je n'utilise jamais cette syntaxe
    La prochaine fois je tournerais 7 fois mes doigts autour du clavier
    avant de repondre

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par c.langlet Voir le message
    Désolé je n'utilise jamais cette syntaxe
    La prochaine fois je tournerais 7 fois mes doigts autour du clavier
    avant de répondre
    Ouais et je m'aperçois que j'ai mis un lien vers Sql server... Voici pour Oracle : http://psoug.org/reference/joins.html
    On est quitte

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    juste un petit HS
    Ton avatar me fait vraiment flipé

  11. #11
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Merci Jérome. c'est la solution.

    Dernière chose en utilisant cette requête dans la fonction PL/SQL d'une colonne de formule, j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    too many rows ora-01422
    .

    ce qui est normal, car je veux dans une requête ramenant plusieurs lignes, affecter une valeur de chaque ligne à ma colonne de formule (select into) que j'utilise dans une colonne de mon état.

    Comment remédier à ce problème ?

    Merci.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par madina Voir le message
    Dernière chose en utilisant cette requête dans la fonction PL/SQL d'une colonne de formule, j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    too many rows ora-01422
    Si c'est le code que tu nous donnes tout en haut avec le INTO, ce n'est pas possible de mettre plusieurs valeurs dans une variable, passe par un curseur ou une solution plus propre - donne nous plus de détails exemple pour t'aider davantage.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par c.langlet Voir le message
    Ton avatar me fait vraiment flippé
    J'ai mis le même sur facebook et j'ai beaucoup moins "d'amis" depuis !
    Don't juge a book by its cover...

  14. #14
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    D'accord, donc je m'explique plus clairement.
    J'ai deux tables sinistre et sinstre_regle(qui contient l'ensemble des sinistres réglés).
    J'ai pu avec la jointure externe faire de sorte que je puisse avoir tous les sinistres même s'ils sont pas réglés.

    Mais je veux dans mn état sur une colonne à afficher récupérer la somme des montants réglés pour un numéro sinistre, un numéro exercice et un code c'est à dire grouper sur ces trois colonnes(group by) la somme des montant réglés(ce montant se trouve dans la table sinistre_regle).

    je veux passer par une colonne de formule pour coder le moyen d'avoir cette valeur et la récupérer dans ma colonne sur l'etat via la palette de propriétés.
    Voilà mon pb et c'est cette fonction que j'utlise dans l'editeur PL/sql de ma colonne de formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function CF_1Formula return Number is
    var_montant number;
    begin
     select sum(montregl) into var_montant  FROM sinistre s,
           sinistre_regle sr  where s.codeinte=sr.codeinte(+) and 
            s.exersini=sr.exersini(+) and
            s.numesini=sr.numesini(+)
          group by sr.CODEINTE ,sr.NUMESINI,sr.EXERSINI;
     
            return var_montant;
    end;
    Et voilà que j'ai cette erreur qui est normale. Maintenat je demande comment je peux résoudre ça ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    J'ai du mal à comprendre le pourquoi de la jointure externe...

    Qu'est qui vous empêche de faire simple comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FUNCTION CF_1Formula RETURN Number IS
    var_montant number;
    begin
    	SELECT sum(montregl) 
    		INTO var_montant  
    	FROM sinistre s,
    		sinistre_regle sr  
    	WHERE s.codeinte = sr.codeinte
    		AND s.exersini = sr.exersini
    		AND s.numesini = sr.numesini
    	GROUP BY s.CODEINTE ,s.NUMESINI,s.EXERSINI ;
     
            RETURN var_montant;
    end;

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Non mais le problème n'a rien à voir avec les jointures.

    Il veut faire rentrer un recordset dans une variable qui ne contient qu'une seule valeur, ce n'est pas possible !

    Une fonction sans paramètre me donne des doutes quant à la bonne utilisation des objets !

  17. #17
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    En fait par soucis de ne pas retourner un recordset sur la colonne de formule, j'ai crée la fonction à part avec des paramètres que j'utilise dans la condition de ma requête et je l'appelle dans le code PL/SQL de ma colonne de formule.

    Maintenant le problème que j'ai c'est que les paramètres que j'utilise sont des données utilisées dans le modelé de données donc des colonnes qui se trouvent dans l'etat, je les réferencie dans la code PL/SQL de la colonne de formule par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return test_formule(:CODEINTE,:numesini,:EXERSINI);
    test_formule est la fonction dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FUNCTION test_formule(p_CODEINTE sinistre.CODEINTE%type,p_NUMESINI sinistre.NUMESINI%type,p_EXERSINI sinistre.EXERSINI %type) return Number is
    var_montant number; 
    BEGIN
      select  sum(montregl) into var_montant  FROM sinistre s,
           sinistre_regle sr  where p_CODEINTE =sr.codeinte(+) and 
            p_EXERSINI=sr.exersini(+) and
            p_NUMESINI=sr.numesini(+)
          group by p_CODEINTE , p_NUMESINI,p_EXERSINI;
     
            return var_montant;
     
    END;
    Et il me signale l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REP-1517 : la colonne CF_1 fait référence à la colonne 'codeinte' qui a une fréquence incompatible.
    CF_1 est le nom de la colonne de formule.

    Il le répète pour les deux autres paramètres.

    Comment je peux faire pour y remédier ?

  18. #18
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Avec des paramètres la donne change : plus besoin de faire la jointure ni de gérer un ensemble :
    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
    FUNCTION test_formule
    (
        p_CODEINTE sinistre.CODEINTE%type,
        p_NUMESINI sinistre.NUMESINI%type,
        p_EXERSINI sinistre.EXERSINI%type
    )
    RETURN Number
    IS
        var_montant number;
     
    BEGIN
          SELECT sum(montregl) INTO var_montant
            FROM sinistre_regle
           WHERE codeinte = p_CODEINTE
             AND exersini = p_EXERSINI
             AND numesini = p_NUMESINI;
     
           var_montant := coalesce(var_montant, 0);
     
           RETURN var_montant;
    END;

  19. #19
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    D'accord, c'est parfaitement ça.
    je suis en 6i, il refuse la fonction coalesce(). y'ail un équivalent et c'est quoi son rôle ?

  20. #20
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Essayez avec la fonction nvl.
    Ça remplace une valeur nulle par une autre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Aide sur une requête LINQ avec left outer join
    Par jbrasselet dans le forum Linq
    Réponses: 5
    Dernier message: 12/09/2011, 09h31
  2. Conditions sur la table de droite d'un LEFT OUTER JOIN
    Par pepper18 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/03/2011, 17h32
  3. Réponses: 2
    Dernier message: 26/07/2010, 11h02
  4. Left outer join sur Select multitable
    Par ChrOnOs83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/01/2009, 17h16
  5. Utilisation d'un filtre directement sur 'LEFT OUTER JOIN'
    Par lodan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2007, 17h17

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