2010-11-08 39 views
2

De toute façon, il est possible d'exécuter des opérations asynchrones dans Oracle.Opérations asynchrones dans Oracle

Voici ma situation: J'ai un proc coûteux (disons qu'il faut 30 minutes pour fonctionner). J'ai un front-end basé sur le Web qui contrôle quand ce proc à exécuter. Je cherche à déclencher le fonctionnement du proc depuis le front-end, et pas vraiment attendre que le proc se termine.i.e., Le contrôle devrait revenir à l'application web, avec un statut comme dire "En cours". Je suis spécifiquement à la recherche d'un mécanisme pour ramener le contrôle au front-end sans attendre que le proc soit terminé.

Merci à l'avance,

SK

+3

Pourriez-vous être plus précis? –

Répondre

8

J'avais la demande de deuxième OMG Poneys pour plus de détails. En fonction de ce que vous essayez d'accomplir, vous pouvez vouloir regarder dans le paquet DBMS_JOBS. Cela vous permet de soumettre un travail à la base de données qui s'exécute de manière asynchrone. Si vous voulez que la base de données pour faire quelque chose informatiquement coûteuse en réponse à une interface graphique, par exemple, votre extrémité avant pourrait exécuter quelque chose comme

CREATE OR REPLACE PROCEDURE run_asynchronously(p_some_parameter IN PLS_INTEGER, 
               p_jobno OUT PLS_INTEGER) 
AS 
BEGIN 
    dbms_job.submit(p_jobno, 
        'BEGIN ' || 
         ' some_expensive_procedure(' || 
           to_char(p_some_parameter) || '); ' || 
        'END;'); 
    RETURN p_jobno; 
END; 

Cela présenterait un travail de fond à courir SOME_EXPENSIVE_PROCEDURE, en passant P_SOME_PARAMETER. Le travail ne démarre pas avant que la transaction sous-jacente ne soit validée, ce qui est excellent si SOME_EXPENSIVE_PROCEDURE fait quelque chose qui ne peut pas être annulé comme l'envoi d'un e-mail ou le transfert FTP d'un fichier.

+1

+1. Bien que je vous recommande de regarder d'abord DBMS_SCHEDULER. C'est un peu plus puissant, mais il accepte automatiquement les travaux, donc parfois vous avez encore besoin de DBMS_JOB. –