Bonjour,

Je fais face à un problème sur mon script, et j'ai vraiment besoin de vos lumières.

Pour vous expliquer ce que je veux faire en deux mots :
Il faut que j'insère dans une table des éléments mois par mois, en partant de deux tables de relation 1,n ayant comme info une date de début et une date de fin.
Le souci, c'est qu'il faut que je fasse une somme sur un indicateur présent dans la table côté n.

Ex :
Table1
ID | Nom

1 | TOTO

Table 2
ID | ID2 | DateDebut | DateFin | Montant

1 | 1 | 01/01/2010 | 01/02/2010 | 10
1 | 2 | 01/02/2010 | 01/03/2010 | 20

Et ce que j'aimerais obtenir :
Table Finale
ID | Nom | Echeance | Montant

1 | TOTO | 01/01/2010 | 10
1 | TOTO | 01/02/2010 | 30
1 | TOTO | 01/03/2010 | 20

J'étais donc parti dans la création d'un curseur sur lequel je voulais placer un FOR pour générer mes différents mois :
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
CREATE OR REPLACE PROCEDURE BO.ALIM_PLANAP_ECH_TEST IS
    v_duree NUMBER;
 
    BEGIN
        EXECUTE IMMEDIATE('TRUNCATE TABLE BO.PLANAP_ECH_TEST');    
        FOR v_rec IN (
                    SELECT d.CORG, 
                           d.CCOMPTE, 
                           d.CORG||d.CCOMPTE AS IDCOMPTE, 
                           d.NOBAIL, 
                           decode(length(d.NOBAIL),1,d.CORG||d.CCOMPTE||'0'||d.NOBAIL,d.CORG||d.CCOMPTE||d.NOBAIL) AS IDBAIL,
                           d.NOPLAN,
                           d.DSIGN,
                           d.MTENGAGE,
                           d.DEFFET,
                           d.DCLOTURE,
                           d.CMODPLAN,
                           p.DDEB,
                           p.DFIN,
                           p.NB
                    FROM DOSPLAN@DB_EELOGI d, PLANRAT@DB_EELOGI p
                    WHERE d.CORG = p.CORG AND d.CCOMPTE = p.CCOMPTE AND d.NOBAIL = p.NOBAIL AND d.NOPLAN = p.NOPLAN
                    ORDER BY CORG,CCOMPTE,NOBAIL,NOPLAN
                   ) 
                   LOOP
                        v_duree := months_between(last_day(v_rec.DFIN),last_day(v_rec.DDEB))+1;
                        FOR i IN 1..v_duree LOOP
 
                            INSERT INTO BO.PLANAP_ECH_TEST
                            VALUES (
                            v_rec.CORG,
                            v_rec.CCOMPTE,
                            v_rec.IDCOMPTE, 
                            v_rec.NOBAIL, 
                            v_rec.IDBAIL,
                            v_rec.NOPLAN,
                            v_rec.DSIGN,
                            v_rec.MTENGAGE,
                            v_rec.DEFFET,
                            v_rec.DCLOTURE,
                            last_day(add_months(v_rec.DDEB,i)-1),
                            to_number(to_char(last_day(add_months(v_rec.DDEB,i)-1),'yyyy')),
                            to_number(to_char(last_day(add_months(v_rec.DDEB,i)-1),'mm')),
                            v_rec.NB * (months_between(last_day(add_months(v_rec.DDEB,i)-1),last_day(v_rec.DDEB))+1),
                            v_rec.MTENGAGE-(v_rec.NB * (months_between(last_day(add_months(v_rec.DDEB,i)-1),last_day(v_rec.DDEB))+1)),
                            v_rec.NB,
                            v_rec.CMODPLAN );        
                        END LOOP;                
                   END LOOP;
         COMMIT;
    END;
/
Le problème c'est que pour avoir mes montants sommés, il faudrait que je fasse un sum() sur mes lignes avec "NB".
Or, l'instruction INSERT INTO ... VALUES n'accepte pas les agrégations (jusque là OK)
Mais mon autre problème, c'est que je ne peux pas utiliser INSERT INTO ... SELECT car v_rec n'étant ni une table ni une vue, je ne peux pas l'utiliser dans un FROM...

Si quelqu'un a une idée...

Merci d'avance