Comment faire pour récupérer plusieurs lignes à partir d'une fonction stockée avec oracle

Je suis en train de créer une fonction stockée dans oracle qui retourne plusieurs lignes.

Ma question est très similaire à cette une sauf que je veux extraire un select * requête

En un mot, je veux créer une fonction qui renvoie le résultat de cette requête

select * from t_email_queue

Ce que j'ai essayé est ce :

create or replace
PACKAGE email_queue AS 

  type t_email_queue_type is table of T_EMAIL_QUEUE%ROWTYPE;  

  FUNCTION lock_and_get return t_email_queue_type;

END email_queue;

create or replace
PACKAGE BODY email_queue AS 

    FUNCTION lock_and_get RETURN t_email_queue_type AS 
      queue_obj t_email_queue_type;

      cursor c (lockid in varchar2) is select * from t_email_queue where lockedby = lockid;
      lockid varchar2(100) := 'alf';
    BEGIN

      OPEN c(lockid);
      FETCH c bulk collect INTO queue_obj;

      return queue_obj;

    END lock_and_get;

END email_queue;

Le paquet compile très bien, mais lorsque j'essaie de l'appeler avec cette requête

select * from table(email_queue.lock_and_get);

Oracle déclenche l'erreur suivante

ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"
*Cause:    
*Action:
Error at Line: 1 Column: 20

Je pense Oracle veux me créer mon type de retour au schéma de niveau mais quand j'essaie de faire

create type t_email_queue_type is table of T_EMAIL_QUEUE%ROWTYPE;  

Oracle se plaint

Type IMAIL.T_EMAIL_QUEUE_TYPE@imail dev
Error(1): PL/SQL: Compilation unit analysis terminated
Error(2,37): PLS-00329: schema-level type has illegal reference to IMAIL.T_EMAIL_QUEUE

Quelqu'un peut-il m'indiquer la bonne direction? Ce qui me manque ici?

Merci pour la lecture!

OriginalL'auteur Alfwed | 2012-12-12