2012-09-27 3 views
0

J'ai une question concernant sys_refcursor. Un sys_refcursor ne peut être utilisé qu'avec une instruction select ou peut-il être utilisé comme suit. Je voudrais que la fonction retourne sys_refcursor.Fonction return sys_refcursor

p_cursor est défini comme sys_refcursor

FOR i IN c 
    LOOP 
     IF (p_start_date BETWEEN i.start_date AND i.end_date) 
      OR (p_end_date BETWEEN i.start_date AND i.end_date) 
     THEN 
      p_cursor := i.product_no; 
     END IF; 
    END LOOP; 
+0

thats pas un curseur, sa valeur unique. Que recherchez-vous, pour retourner une liste de numéros de produits? – tbone

+0

@tbone Je voudrais savoir si assigner product_no et une autre colonne à p_cursor si je n'utilise pas l'instruction SQL. – user75ponic

+0

désolé, ne l'a toujours pas obtenu – tbone

Répondre

1

Vous avez deux façons de le faire en fonction de ce que vous voulez.

Première
Si vous voulez toujours avoir la colonne de votre curseur, et en fonction de cette condition, d'attribuer une valeur à la colonne ou non. Vous pouvez effectuer les opérations suivantes

code:

OPEN p_cursor FOR 
SELECT i.columna1, i.columna2, 
     (SELECT i.product_no 
      FROM dual 
     WHERE (p_start_date BETWEEN i.start_date AND i.end_date) 
      OR (p_end_date BETWEEN i.start_date AND i.end_date) 
     ) as product_no 
FROM table_name i 

Deuxième
Si vous voulez parfois avoir la colonne et parfois vous juste ne pas. Vous pouvez créer dinamically la requête dans une variable varchar, puis affecter cette requête au curseur.

code:

DECLARE 
    var VARCHAR2(200); 
BEGIN 

    var := 'select * from dual'; 

    open p_cursor for var; 

END; 
+0

Merci pour votre aide. Cordialement – user75ponic