Utiliser un curseur comme une table
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:
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. :ccool: