Bonjour,
Mise en situation :
J'ai un curseur avec un paramètre, et je voudrais interpréter son résultat comme une table afin de pouvoir faire une requète sur le tableau qu'il retourne.
Exemple simplifié de mon code (très simplifié, en effet, si ma requête se limite à ceci, je ferais autrement) :
Le soucis étant la partie en rouge, je ne peux pas utiliser mon curseur de cette façon...
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 DECLARE g_last_mail mob_dcl_subs_emails.subs_email_address%TYPE; ---------------------- --All el. customer ---------------------- CURSOR cur_cust IS SELECT DISTINCT (cu.customer_id) FROM customer cu, info_cust inf WHERE inf.customer_id = cu.customer_id AND inf.combo = 'blabla'; ---------------------- --All contracts ---------------------- CURSOR cur_all_contr ( c_customer_id customer.customer_id%TYPE) IS SELECT DISTINCT ca.co_id, ca.value_x FROM contract ca, co_status costa WHERE ca.customer_id = c_customer_id AND costa.co_id = ca.co_id AND costa.status = 'a'; ---------------------- --Get last email ---------------------- PROCEDURE get_last_mail (v_custid IN customer.customer_id%TYPE, v_email OUT emails.email%TYPE) IS p_val_x NUMBER; BEGIN SELECT email INTO v_email FROM emails e WHERE e.val_x IN (cur_all_contr(v_custid).value_x) AND ROWNUM = 1 ORDER BY e.date DESC; END get_last_mail; ---------------------- --Main process ---------------------- BEGIN FOR row_cust IN cur_cust LOOP get_last_mail (row_cust.customer_id, g_last_mail); END LOOP; END;
Existe-t'il une façon d'utiliser le retour de mon curseur comme une table dans ce cas? Afin de le parcourir dans une requête?
Merci pour votre aide.
Partager