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) :

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;
Le soucis étant la partie en rouge, je ne peux pas utiliser mon curseur de cette façon...
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.