Bonjour,
Je suis en train d'écrire une procédure qui doit retourner le montant (paramètre de sortie) de la dernière commande à un fournisseur donné (paramètre en entrée).
J'ai une table FOURNIS(PK_NUMFOU NUMBER (numéro fournisseur), NOMFOU VARCHAR2 (nom fournisseur)), une table COMMANDE (PK_NUMCOM NUMBER(numéro commande), #NUMFOU NUMBER(numéro fournisseur), DATCOM DATE(date commande)) et une table LIGCOM(#NUMCOM NUMBER(numéro commande), #CODART NUMBER (code artcile), NUMLIG NUMBER(numéro de ligne de commande), QTECDE NUMBER(quantitée commandée), PRINUI NUMBER(prix unitaire)). LIGCOM étant une jointure entre une table PRODUIT(non détaillée ici) et la table COMMANDE.
Donc la dernière commande, c'est le NUMCOM où NUMFOU (numéro fournisseur) est égal au paramètre passé en entrée de la procédure et où DATCOM = MAX(DATCOM) du fournisseur NUMFOU (égal au paramètre passé en entrée de la procédure).
Ensuite, il me faut récupérer toutes les lignes de LIGCOM où figure le NUMCOM récupéré ci-dessus pour faire la somme des produits de la quantité d'articles par le prix unitaire (SUM(QTECDE * PRIUNI)).
Pour cela, j'ai écrit ceci mais je rame :
Je vous remercie d'avance pour votre aide !
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
22
23 CREATE OR REPLACE PROCEDURE PROC_MONTANT ( FOU IN NUMBER , MONT OUT NUMBER ) AS num_fou commande.numfou%TYPE; montant_comm NUMBER; command NUMBER; CURSOR cur_com (foucur NUMBER) IS SELECT c.NUMCOM FROM COMMANDE c WHERE c.NUMFOU = foucur AND c.DATCOM = (SELECT MAX(c1.DATCOM) FROM COMMANDE c1 WHERE c1.NUMFOU = foucur); BEGIN OPEN cur_com(foucurs); FETCH cur_com INTO command; SELECT SUM(PRIUNI*QTECDE) FROM LIGCOM WHERE NUMCOM = command; END PROC_MONTANT;
Partager