Quelle est la bonne façon de traiter avec cet Oracle ORA-01403: pas de données disponibles Exception?

J'ai une table DB que je suis plus ou moins traiter comme une file d'attente. Je suis en train de chercher un seul élément de celui-ci. Cela fonctionne, sauf lorsque le SELECT..DANS échoue (ce qui peut arriver si il n'y a qu'un seul élément dans la file d'attente et de deux utilisateurs sur des machines distinctes essayer de le chercher, un seul va gagner).

Cela conduit à l'familier ORA-01403: pas de données disponibles exception. J'ai essayé de changer le PS de sorte qu'il serait de retour NULL dans ce cas le même type de résultat que vous obtiendrais une requête ne pouvais pas trouver tous les enregistrements, mais en vain. Je suis en train de faire quelque chose de mal ici.

PROCEDURE sp_GetNextEmailFromQueue (pAgentId IN NUMBER, pRecs OUT recordSet)
  IS
  EMAIL_ID INTEGER;
  BEGIN

     SELECT id INTO EMAIL_ID FROM
           (SELECT id, is_replied_to, is_being_worked, date_received 
           FROM SSQ_EMAILS
           WHERE is_replied_to = 0 AND is_being_worked =0
           ORDER BY date_received ASC)
     WHERE rownum = 1;


    UPDATE SSQ_EMAILS x 
             SET x.is_being_worked = 1,
                 x.agent_id = pAgentId,
                 x.work_started_date = SYSDATE
             WHERE x.id = EMAIL_ID;

    OPEN pRecs FOR
      SELECT x.id,
             x.message_id,
             x.to_email,
             x.from_email,
             x.subject,
             x.message,
             x.date_received,
             x.href_link,
             x.is_being_worked,
             x.work_started_date,
             x.is_replied_to
        FROM SSQ_EMAILS x
        WHERE x.id = EMAIL_ID;

        EXCEPTION
          WHEN no_data_found 
            THEN 
              OPEN pRecs FOR
              SELECT NULL
              FROM SSQ_EMAILS;

  END;

OriginalL'auteur Chris Holmes | 2012-02-01