|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Bonjour,
Je travaille sur de la GPAO. Je souhaite connaître la position de mon opération sur ma gamme opératoire. Une gamme opératoire est constituée de plusieurs opérations. J'ai donc une table des gammes et une table des opérations. La table des gammes a pour clé unique id_gamme. La table des opérations a pour clé unique l'id_operation et pour clé étrangère l'id_gamme. Il y a également un champ qui correspond au rang. Je veux créer une requête sql qui pour chaque opération d'une gamme me restitue la position dans la gamme (1,2,3, ...). Je suis sur Oracle 10g et je souhaite placer cette requête dans une vue pour l'utiliser sur CR XI. Je vous remercie d'avance. Bon week-end. Julien. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
bonjour,
et qu'avez-vous essayé comme requête ? où bloquez-vous ? |
|
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Je souhaiterais que pour chaque opération sur laquelle il reste du "à travailler", les opérations suivantes apparaissent sur la même ligne.
Le raisonnement n'est pas très bon puisque potentiellement le nombre d'opérations sur la gamme opératoire est illimité et cela pourrait "déborder" de mon report. Je ne sais pas si cela est faisable. Ma requête SQL est la suivante : Code :
La requête ramène plusieurs lignes pour la même gamme opératoire. Je souhaiterais qu'elle ramène une ligne par opération. Exemple : sur ma gamme, j'ai 3 phases : la 10, la 20 et la 30. Je voudrais l'id_wo et 10, 20, 30 l'id_wo et 20,30 l'id_wo et 30. Merci d'avance. |
||
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Je ne comprend pas.
Vous utilisez des termes dans tous les sens, sans les réutiliser ni les modéliser. Donc : Vos deux tables : gamme (gam_id, ...) opérations (ope_id, gam_id, rang, ...) <= gam_id ne fait-il pas aussi partie de votre clef primaire ? A quoi correspond le rang par rapport à "position dans la gamme" et "position dans la gamme opératoire" A quoi correspond une "phase" par rapport aux tables décrites ? Que viens faire "l'ordre de fabrication" là-dedans ? vous ne le mentionnez nulle part dans la description de vos tables ? Bref, faites une présentation correcte de votre modélisation, mettez un exemple parlant de vos données en base et du résultat souhaité car là je nage complètement. Enfin pour ceci : Citation:
A creuser donc. |
|
|
|
10
|
|
|
#5 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Effectivement je présuppose que mon interlocuteur y connaisse un minimum en GPAO. Je vais essayer d'être plus clair.
Mes tables : Ordres de fabrication : WO dont la clé primaire unique est id_wo, Opérations (ou phases) de la gamme opératoire : WO_OP dont la clé primaire unique est id_wo_op. Elle possède une clé étrangère non-unique qui est id_wo et un champ seq qui est la séquence dans la gamme opératoire (ce qui est habituellement nommé le rang). Dans la mesure où celui-ci est modifiable, je ne peux utiliser la clé de WO_OP pour avoir les phases suivantes. Je travaille sur Oracle 10g. |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
On reprend,
Vous avez donc deux tables : WO (id_wo,...) WO_OP (id_wo_op, id_wo, seq, ...) La relation entre les deux est WO (0,n) ---------- (0,1) WO_OP c'est ça ? niveau exemple de donnée, que j'invente : Code :
que voulez-vous en sortie ? ceci ? |
||
|
|
00
|
|
|
#7 | |||||
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Citation:
En sortie, je souhaiterai avoir Code :
|
|||||
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Concernant votre colonne "seq" quelles sont les valeurs possible dedans ?
est-ce qu'il y a toujours une incrémzentation de 10 ? Est-ce celà commence toujours à 10 ? |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
La séquence peut être modifiée par l'utilisateur et l'ERP ne la recalcule pas.
|
|
|
00
|
|
|
#10 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Le problème étant que vous cherchez à faire une concaténation de chaine sur un principe un peu spécial, et que seule une requête récursive permettra de le faire.
Maintenant si votre séquence n'a aucune suite logique sur laquelle s'appuyer, on peut s'appuyer sur 2 vue pour ce faire (peut être qu'avec une seule requête ça passe mais je n'ai pas Oracle ici). 1ere vue afin d'ordonner correctement votre séquence : Code :
Ensuite requête récursive pour former le résultat : Code :
Peut-être qu'une autre personne aura une idée. |
||||
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut,
C'est de la concaténation de chaîne de caractères. Bien tenté Punkoff, mais si je ne m'abuse le WITH récursif n'est pas implémenté par Oracle avant la 11 (et je suis pas sûr de la release 1 ou 2). En attendant, tu peux te dépatouiller avec les méthodes existantes, par exemple en liant tes lignes en requête hiérarchique : Code :
Code :
[EDIT] tiens, en relisant l'énoncé, je me suis vautré sur le sens du connect... à corriger
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||||
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Je ne penses pas que calà va marcher.
Code :
|
||
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Salut Pacman,
Citation:
String Aggregation Techniques Il manque juste la technique du XML. Pour info, le WITH recursif c'est en 11GR2, et pour cette version je préfère LISTAGG qui est je trouve le plus simple. |
|
|
|
00
|
|
|
#14 | ||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
J'ai connement pris l'exemple donné sans essayer de comprendre, désolé
Sinon pour avoir les bonnes lignes, il faut garder celles dont la seq est max : Code :
Code :
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||||
|
00
|
|
|
#15 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Hey salut Skuatamad !
Justement, c'est sur celle-ci que j'étais parti... et c'est un peu galère (Par contre, j'étais très déçu de m'apercevoir que ce n'est pas compatible à l'analytique... du coup chuis parti sur autre chose)
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#16 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
J'avoue être un peu perdu.
J'ai remplacé le terme DUAL par le nom de ma table. Que dois-je modifier d'autre ? Comment utiliser cette requête ? Dois-je créer une vue sur SQLDEVELOPPER ?. Merci d'avance. |
|
|
00
|
|
|
#17 | ||||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
La vue, c'est comme tu le sens (soit tu appelles la vues ensuite, soit tu retapes à chaque fois la requête).
Concernant cette partie : Code :
Code :
Note la remarque de punkoff, et essaie d'y intégrer le ROW_NUMBER sur lequel tu pourras faire le CONNECT BY (à la place de id_wo_op) Code :
En fait, tu peux tenter de lancer sans, et tu verras que toutes les arborescences possibles sont construites, alors que selon ton exemple, seulement celles contenant la dernière opération t'intéressent.
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||||||
|
00
|
Copyright © 2000-2012 - www.developpez.com