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 :

Créer une vue multi lignes [10g]


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut Créer une vue multi lignes
    Bonjour à tous,

    J'utilise Oracle 10g (oui c'est vieux) qui est exploité depuis Sage X3.

    J'ai une table contenant une liste de bon de livraison et deux champs contenant le nombre de colis et le nombre de palette.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +-----------------+-------------+--------+
    |   SDHNUM   | PACNBR | XPAL |
    +-----------------+-------------+--------+
    | 2025020101 |       1        |    0    |
    +-----------------+-------------+--------+
    | 2025020103 |       5        |    1    |
    +-----------------+-------------+--------+
    | 2025010150 |       3        |    2    |
    +-----------------+-------------+--------+
    Depuis cette liste de données je dois générer autant d'étiquettes que d'unité de manutention (PACNBR + XPAL). La génération se fera depuis Crystal Report mais le hic est que pour un bon de livraison je n'ai qu'un enregistrement donc Crystal affichera une seule étiquette. Pour contourner ça j'ai créer une vue qui va me générer autant de ligne que la somme de PACNBR et XPAL. Par exemple pour le bon de livraison 2025020103 :

    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
    +-----------------+-------------+
    |   SDHNUM   |  QTYUM  | 
    +-----------------+-------------+
    | 2025020103 |       1        |
    +-----------------+-------------+
    | 2025020103 |       2        |
    +-----------------+-------------+
    | 2025020103 |       3        |
    +-----------------+-------------+
    | 2025020103 |       4        |
    +-----------------+-------------+
    | 2025020103 |       5        |
    +-----------------+-------------+
    | 2025020103 |       6        |
    +-----------------+-------------+
    Pour le moment ma requête ressemble à ça (j'ai pas encore intégré la somme PACNBR, XPAL) :

    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
    SELECT 
        s.SDHNUM_0,
        t.QTYUM
    FROM 
        SDELIVERY s
    JOIN 
        (SELECT ROWNUM AS QTYUM
         FROM dual
         CONNECT BY LEVEL <= (SELECT PACNBR_0 
                               FROM SDELIVERY 
                               WHERE SDHNUM_0 = SDHNUM_0)
        ) t
    ON t.QTYUM <= s.PACNBR_0
    WHERE 
        s.SDHNUM_0 = SDHNUM_0
    ORDER BY 
        s.SDHNUM_0, t.QTYUM

    En requête "pure" que je lance depuis dbeaver j'ai le résultat souhaité mais quand j'utilise cette requête pour créer ma vue et que je fais un simple SELECT * FROM MAVUE j'ai l'erreur ORA-01427.

    C'est la première fois que je me frotte aux vues, est-ce que vous auriez des pistes ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 337
    Par défaut
    Bonjour,
    Je ne connais pas CONNECT BY LEVEL de Oracle, mais comme l'erreur indique qu'une sous requête renvoie plusieurs lignes, je me demande si le problème ne viendrait pas de là:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT PACNBR_0 
                               FROM SDELIVERY 
                               WHERE SDHNUM_0 = SDHNUM_0
    Il ne manque pas un alias sur (au moins) un des SDHNUM_0 ?

    Tatayo.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut
    Effectivement ça pourrait être mieux mais en modifiant la requête de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE SDHNUM_0 = s.SDHNUM_0)
    J'ai l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL Error [904] [42000]: ORA-00904: "S"."SDHNUM_0" : identificateur non valide

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut
    Après avoir pas mal bataillé j'arrive à cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH numbers AS (
    	SELECT LEVEL AS num
    	FROM dual
    	CONNECT BY LEVEL <= (SELECT MAX(PACNBR_0 + XPALETTE_0) FROM SDELIVERY WHERE SDHNUM_0 = 'LIVHIL25020002')
    )
    SELECT S.SDHNUM_0, S.PACNBR_0, S.XPALETTE_0
    FROM SDELIVERY S 
    JOIN numbers N ON N.num <= (S.PACNBR_0 + S.XPALETTE_0)
    WHERE S.SDHNUM_0 = 'LIVHIL25020002'
    Les deux conditions WHERE me permettent juste de limiter la recherche à un bon de livraison pour mes tests.

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

Discussions similaires

  1. [2008R2] Requête sur une Vue multi Bases
    Par PhilouBilou59 dans le forum Développement
    Réponses: 19
    Dernier message: 13/03/2020, 14h05
  2. [WD17] BUG sur Cadrage Vertical dans une table multi-lignes
    Par jimmypage dans le forum WinDev
    Réponses: 2
    Dernier message: 22/03/2013, 18h34
  3. probleme avec une vue multi tables
    Par yassinove10 dans le forum Requêtes
    Réponses: 0
    Dernier message: 21/06/2011, 17h05
  4. [HTML] Supprimer le multi ligne d'une zone de text
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2005, 15h49

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