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 :

appel programme externe depuis pl/sql [FAQ]


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut appel programme externe depuis pl/sql
    bonjour
    je suis sur une bdd oracle9i plateforme solaris et
    je souhaite faire un appel à un shell(unix) depuis de mon pl/sql,
    sachant que mon pl est deja dans un shell via une connexion sqlplus / .
    est ce possible?

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    oui, via la fonction Host()

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    j'ai testé, mais en vain.
    Serait ce parce-que je suis en pl/sql et non en sqlplus.
    j'essaie d'appele le prgr depuis n un bloc pl ie
    begin
    ....
    host mon_shell.ksh ma_variable ;
    ....
    end;

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par SheikYerbouti
    oui, via la fonction Host()
    Tu es sûr ?
    Moi j'en suis resté à l'info que HOST est une commande de SQL*Plus, et qu'elle n'est pas disponible dans du PL...

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    ah oui, mille excuses ! le bloc pl/sql s'exécute au niveau du noyau...( honte sur moi...)

    il vous faudrait passer par les external_calls...
    voyez avec votre DBA

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Dans un bloc PL il faut que tu utilises les librairies externes.

    1. Crées une librairie C shell.c (par exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void sh(char *);
     
    void sh( char  *cmd )
    {
           int num;
           num = system(cmd);
    }
    2. Compile la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    make -f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_nocallback \SHARED_LIBNAME=shell.so OBJS=shell.o

    3. Définis-la sous ORACLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE LIBRARY shell_lib IS 'chemin_complet/shell.so';
    /
    4. Crées la procédure associée à la librairie qui permettra d'exécuter ta comande host en PL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE PROCEDURE shell (cmd IN CHAR)
    AS EXTERNAL
      NAME "sh"
      LIBRARY shell_lib
      LANGUAGE C
    PARAMETERS (
      cmd STRING);

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    merci pour les reponses!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/04/2008, 16h48
  2. Lire un PDF sans appel programme externe
    Par HurtMarley dans le forum C
    Réponses: 8
    Dernier message: 16/05/2007, 09h23
  3. Réponses: 2
    Dernier message: 12/07/2006, 08h44
  4. [Système] Lancer un programme externe depuis une page web
    Par needles94000 dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2006, 21h34
  5. [Système] Executer un programme externe depuis un scripte php
    Par Scorpion Rouge dans le forum Langage
    Réponses: 1
    Dernier message: 24/01/2006, 11h59

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