Bonjour,

Je me tourne vers vous parce que je suis entrain de m'arracher les cheveux...
Je veux créer une procédure en PL utilisant un curseur, mais pas moyen de la compiler correctement. Voici le code de base :
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
CREATE OR REPLACE PROCEDURE BO.ALIM_PLANAP_ECH IS
DECLARE
    v_corg VARCHAR2(2 BYTE);
    v_compte VARCHAR2(11 BYTE);
    v_bail NUMBER(2);
    v_plan NUMBER(2);
    v_lddeb DATE;
    v_ldfin DATE;
    v_duree NUMBER(4);
    v_nb NUMBER(9,2);
    CURSOR tmp_det_plans IS
        SELECT p.CORG,p.CCOMPTE,p.NOBAIL,p.NOPLAN,last_day(p.DDEB) AS LDDEB,last_day(p.DFIN) AS LDFIN,p.NB,months_between(last_day(p.DFIN),last_day(p.DDEB)) AS DUREE
        FROM PLANRAT@DB_EELOGI p;
    BEGIN
        EXECUTE IMMEDIATE('TRUNCATE TABLE BO.PLANAP_ECH');
        OPEN temp_det_plans;
        FETCH temp_det_plans INTO v_corg, v_compte, v_bail, v_plan, v_lddeb, v_ldfin, v_duree, v_nb;
        FOR i IN 0..v_duree LOOP
            INSERT INTO BO.PLANAP_ECH
            SELECT
                v_corg,
                v_compte,
                v_bail,
                decode(length(v_bail),2,v_corg||v_compte||'0'||v_bail,v_corg||v_compte||v_bail),
                v_plan,
                to_number(to_char(add_months(v_lddeb,i),'yyyy')),
                to_number(to_char(add_months(v_lddeb,i),'mm')),
                add_months(v_lddeb,i),
                v_nb,
                v_corg||v_compte
             FROM DUAL;
        END LOOP;
    END;
A la compilation, j'ai l'erreur :
ERROR line 3, col 12, ending_line 3, ending_col 19, Found 'VARCHAR2', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
Je ne comprends pas pourquoi...

Si je retire mon instruction "DECLARE", ça passe au niveau des variables. Par contre j'ai l'erreur :
PLS-00201: identifier 'TEMP_DET_PLANS' must be declared
Celle là je la comprends mieux...

Mais si, du coup, je place mon DECLARE après mes variables, avant mon "CURSOR", j'ai l'erreur suivante :
ERROR line 11, col 12, ending_line 11, ending_col 24, Found 'tmp_det_plans', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
Alors, je ne pige plus rien...

C'est sûrement évident mais comme je débute en PL j'ai un peu de mal...

EDIT : Tant que j'y suis, si quelqu'un peut me dire comment boucler mon FETCH pour qu'il aille jusqu'à EOF...