Bonjour à tous,

Avant toute chose merci pour ce forum qui m'aide quasi au quotidien en ce moment.

J'ai un souci avec une requête PL/SQL.
Le but est de récupérer des données dans plusieurs tables pour les insérer dans une nouvelle table.
J'ai foutu des dbms_output un peu partout pour voir ce qui n'allait pas car la requête est bien compilé. Et en fait je n'entre jamais dans mon IF.
Le seul affichage qui apparaît est celui qui suit l'ouverture de mon curseur : dbms_output.put_line('avant for' || numnum);

Pour simplifier la lecture, j'ai enlevé le where de mon curseur. J'ai testé ma requête select indépendamment et elle me fourni bien ce que j'attends.

J'avais fait un curseur implicite à l'origine et comme ça ne fonctionnait pas, je suis passé à un explicite avec un peu d'espoir.
Mais non.

Pouvez-vous m'aider ?

Merci d'avance

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
declare
id_objet NUMBER;
id_groupe VARCHAR2(9);
toto VARCHAR2(20);
numero VARCHAR2(15);
numnum VARCHAR2(30);
 
    cursor curseur is select distinct(table1.lenumero), table2.groupid, table1.toto
    from table1, table2, table3
    where mesconditions;
 
BEGIN
    id_objet := 0;
    id_groupe := NULL;
    toto := NULL;
    numero := NULL;
    numnum := NULL;
 
 
    OPEN curseur;
    dbms_output.put_line('avant for' || numnum);
 
    loop
        FETCH curseur
        INTO numero, id_groupe, toto;
        EXIT WHEN curseur%NOTFOUND;
 
        dbms_output.put_line('numero' || numero);
 
        sa.Proc_id_obj ('ordre', id_objet);
		-- procédure interne qui me fourni des id_objet non utilisé
        numnum := substr(numero,length(numero-8))||';'||substr(numero,length(numero-8));
 
        insert into table_ordre(OBJID, X_AV_DATE, X_AV_STATUT, X_AV_PARAM1, X_AV_PARAM2, X_AV_PARAM3, X_AV_PARAM4, X_AV_PARAM5)
        values (id_objet, sysdate, 'P', id_groupe, toto, numero, numnum, 'OK');
 
        dbms_output.put_line('id_objet : ' || id_objet);
        dbms_output.put_line('id_groupe : ' || id_groupe);
        dbms_output.put_line('toto : ' || toto);
        dbms_output.put_line('numero : ' || numero);
        dbms_output.put_line('numnum : ' || numnum);
        dbms_output.put_line('-----------------------------------------');
 
        id_objet := 0;
        numnum := NULL;  
 
        dbms_output.put_line('id_objet : ' || id_objet);
        dbms_output.put_line('numnum : ' || numnum);
        dbms_output.put_line('-----------------------------------------'); 
 
    end loop;
 
    close curseur;
 
END;
/