Bonjour à tous !
Je découvre actuellement la gestion des curseurs sous Oracle, j'ai passé plusieurs années sous TRANSACT-SQL (Microsoft) auparavant.
Ma plasticité neuronale n'étant pas exceptionnelle, j'ai un peu de mal à faire le switch intellectuel.
Contexte de ma question :
J'ai un carnet de commande plusieurs lignes de commande envoyé par un client tous les débuts de semaines (Colonnes article, date, une quantité à livrer, Reste à livrer). Rien d'exceptionnel jusque la.
Notre société livre plusieurs fois dans la semaine, on nous aimerions connaitre le reste à livrer sur les commandes en question avant la prochaine réception du carnet de commande la semaine d'après.
Contrainte : La somme des BL expédiés doit décrémenter les quantité des commandes ligne par ligne dans une colonne reste à livrer en fonction des dates.
Le tout est ensuite injecté dans une autre table (similaire) qui vient accueillir le reste à livrer. Je précise que ne veux pas modifier la table d'origine (il s'agit de la table d'un ERP).
J'éprouve de grandes difficultés à garder la variable du "reste" en mémoire pour qu'elle soit traitée dans la ligne d'après (quelque chose m'échappe).
Quelqu'un peut-il m'orienter sur le moment ou je dois initialiser/calculer mes variables ?
N.B : Désolé si mon code manque de classe, j'en suis à mes balbutiements
Merci par 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 DECLARE REFERENCE T_CMDE.REFERENCE%TYPE; NUM_CMDE_CLI T_CMDE.NUM%TYPE; DATE_LIV T_CMDE.DATE_JOUR%TYPE; QTE T_CMDE.QTE%TYPE; QTE_RAL NUMBER :=0; QTE_LAST_BL NUMBER :=16; RESTE NUMBER :=0; RESTE2 NUMBER :=0; CURSOR CURS_ IS SELECT a.REFERENCE , a.NUM_CMDE_CLI , a.DATE_LIV , a.QTE , QTE_RAL , QTE_LAST_BL FROM T_CMDE a WHERE a.REFERENCE='ARTICLE_1' ORDER BY , TO_DATE(TO_CHAR(TO_DATE(SUBSTR(a.DATE_LIV,0,8),'yyyymmdd'),'dd-mm-yyyy')) ASC; BEGIN OPEN CURSE_GS; LOOP FETCH CURSE_GS INTO ID_EDI_FILE , REFERENCE , NUM_CMDE_CLI , DATE_LIV , QTE , QTE_RAL , QTE_LAST_BL ; INSERT INTO T_CMDE_RAL VALUES ( ID_EDI_FILE , REFERENCE , NUM_CMDE_CLI , DATE_LIV , QTE , QTE_RAL , QTE_LAST_BL , RESTE2 ); EXIT WHEN NOT CURSE_GS%FOUND; END LOOP;
Partager