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 :
A la compilation, j'ai l'erreur :
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;
Je ne comprends pas pourquoi...ERROR line 3, col 12, ending_line 3, ending_col 19, Found 'VARCHAR2', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
Si je retire mon instruction "DECLARE", ça passe au niveau des variables. Par contre j'ai l'erreur :
Celle là je la comprends mieux...PLS-00201: identifier 'TEMP_DET_PLANS' must be declared
Mais si, du coup, je place mon DECLARE après mes variables, avant mon "CURSOR", j'ai l'erreur suivante :
Alors, je ne pige plus rien...ERROR line 11, col 12, ending_line 11, ending_col 24, Found 'tmp_det_plans', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
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...
Partager