IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

PL/SQL : exécution procédure en asynchrone sans utilisation de DBMS_JOB


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Par défaut PL/SQL : exécution procédure en asynchrone sans utilisation de DBMS_JOB
    Bonjour,

    Oracle 9i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Begin
      Procedure_1;
      Procedure_2;
    END;
    Je voudrais que la procedure_2 soit exécutée même si la procedure_1 n'est pas terminée mais sans utilisation de DBMS_JOB.

    Est-ce possible ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2006
    Messages : 142
    Par défaut
    Bonjour,

    et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Begin
      Procedure_1;
    END;  
    Begin
      Procedure_2;
    END;
    Comme les blocs sont indépendants l'un peut planter sans gêner l'autre...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Par défaut
    Bonjour,

    je voudrais démarrer la procedure_2 sans attendre la fin de l'exécution de la procedure_1, ce qui n'est pas le cas dans la solution que tu proposes : la procedure_2 demarrera quand la procedure_1 sera terminée.

    Le but est que les 2 procédures dialoguent entre elles via "pipe".

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Citation Envoyé par denis.henkens Voir le message
    mais sans utilisation de DBMS_JOB.
    Pourquoi ?

    Pour lancer 2 procédures en parallèle il faut 2 sessions donc soit tu ouvres 2 sessions sqlplus par exemple soit tu utilises dbms_job.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Par défaut
    Le but est d'avoir un dialogue (via "pipe") entre un fmx et une procédure que cet fmx démarre.

    J'utilisais dmbs_job mais il y a trop de jobs dans la queue ce qui fait que j'ai un timeout au niveau du dialogue via "pipe".

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Une fonction pipelined?
    Ca permet de se servir d'une fonction comme lors d'un select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    begin
     for i in (select * from table(ma_func1_pipelined)) loop
       ma_proc2(i.param1,i.param2);
     end loop;
    end;
    /
    Mais ca devient a sens unique, et ca peut ne pas convenir.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Par défaut
    Bonjour,

    Cela aurait pu convenir mais dans la fonction appelée il y a des insert, update, delete, commit, ... ce qui n'est pas accepté.
    J'ai mis la fonction en PRAGMA AUTONOMOUS_TRANSACTION mais là, au moment du PIPE ROW, j'ai l'erreur :
    ORA-06519: active autonomous transaction detected and rolled back


    Ca va, j'ai trouvé : je dois faire un COMMIT avant le PIPE ROW

    En combinant la fonction PIPELINED et le DBMS_PIPE, je parviens à faire communiquer un fmb avec la fonction

    merci à Rams7s de m'avoir mis sur la piste de la fonction pipelined

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/04/2013, 12h01
  2. Réponses: 4
    Dernier message: 02/11/2009, 16h22
  3. Exécuter procédure stocké sans reload de page
    Par jpower dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/08/2007, 22h11
  4. requete SQL sur Typed DataSet, sans utiliser SQL serveur
    Par Harry_polin dans le forum Accès aux données
    Réponses: 2
    Dernier message: 06/10/2006, 19h15
  5. [SQL SERVER 2K]Droits d'exécution procédure stockée
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/05/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo