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

Oracle Discussion :

Appel d'un script SQL dans une procdure stockée


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Appel d'un script SQL dans une procdure stockée
    Bonjour,

    Je débute dans les bases de données (surtout sous Oracle) et j'ai déjà une question: est-il possible d'appeler un script sql dans une procadure stockée?

    Exemple:

    CREATE PROCEDURE Export_Enregistrement ( )
    IS
    BEGIN

    @c:\tmp\get_data.sql;

    END;

    avec c:\tmp\get_data.sql mon script sql

    Merci pour votre aide.

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non ca n'est pas possible. Ta procédure PL/SQL est exécutée coté serveur tandis que le script est accédé coté client par SQL*Plus.

    Par contre, tu peux déporter le code de ton script dans ta procédure et d'appeler cette dernière dans SQL*Plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec Export_Enregistrement;

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par lalystar
    Par contre, tu peux déporter le code de ton script dans ta procédure et d'appeler cette dernière dans SQL*Plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec Export_Enregistrement;
    Laly.
    Merci Laly, mais j'ai un doute pour la procédure stockée en y intégrant le code de mon script.
    Si je fais ça, ma procédure stockée serait la suivante:

    CREATE PROCEDURE Export_Enregistrement ( )
    IS
    BEGIN

    set echo off;
    set term off;
    set heading off;
    set pagesize 0;
    set termout off;
    set feedback off;
    set linesize 132;
    set sqlprompt '';
    spool c:\tmp\export.txt;
    select ... from maTable;
    spool off;
    set termout on;
    set feedback on;
    set pagesize 60;

    END;

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Les instructions suivantes sont de SQL*Plus, tu ne peux pas les mettre dans une procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    set echo off; 
    set term off; 
    set heading off; 
    set pagesize 0; 
    set termout off; 
    set feedback off; 
    set linesize 132; 
    set sqlprompt ''; 
    spool c:\tmp\export.txt; 
     
    spool off; 
    set termout on; 
    set feedback on; 
    set pagesize 60;
    Si tu veux te faire une fonction qui te renvoie la requête qui permet de récupérer les données pour la génération de ton flux, tu peux faire (si tu es sous Oracle 9i, sinon tu dois te créer un type REF CURSOR) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> create or replace function Export_Enregistrement return sys_refcursor as
      2     ret   sys_refcursor;
      3  begin
      4     open ret for
      5        select   *
      6        from     EMP;
      7  
      8     return ret;
      9  end;
     10  /
    Et l'appel en SQL*Plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    SQL> variable rc refcursor;
    SQL> 
    SQL> exec :rc := Export_Enregistrement;
     
    PL/SQL procedure successfully completed.
     
    SQL> print rc;
     
         EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 17/12/80        800                    20
          7499 ALLEN      SALESMAN        7698 20/02/81       1600        300         30
          7521 WARD       SALESMAN        7698 22/02/81       1250        500         30
          7566 JONES      MANAGER         7839 02/04/81       2975                    20
          7654 MARTIN     SALESMAN        7698 28/09/81       1250       1400         30
          7698 BLAKE      MANAGER         7839 01/05/81       2850                    30
          7782 CLARK      MANAGER         7839 09/06/81       2450                    10
          7788 SCOTT      ANALYST         7566 19/04/87       3000                    20
          7839 KING       PRESIDENT            17/11/81       5000                    10
          7844 TURNER     SALESMAN        7698 08/09/81       1500          0         30
          7876 ADAMS      CLERK           7788 23/05/87       1100                    20
     
         EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
          7900 JAMES      CLERK           7698 03/12/81        950                    30
          7902 FORD       ANALYST         7566 03/12/81       3000                    20
          7934 MILLER     CLERK           7782 23/01/82       1300                    10
     
    14 rows selected.

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    En fait je souhaite faire une procédure stockée qui me permet d'exporter le contenu de mon select dans un fichier plat et là je suis un peu perdue.
    Mon pb est que ce fichier est situé sur un serveur (Oracle) dont je n'ai pas accès, par conséquent je pense qu'une procédure stockée est la meilleure solution mais là je ne comprends pas la méthode à appliquer.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Pour info je suis sous Oracle9i

  7. #7
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par doudou10000
    En fait je souhaite faire une procédure stockée qui me permet d'exporter le contenu de mon select dans un fichier plat et là je suis un peu perdue.
    La question est : où souhaites tu avoir ce fichier plat ? Sur le serveur ou sur le client ?

    Si tu souhaites l'avoir sur le poste client d'où tu lances SQL*Plus, la solution est celle que tu as présentée (avec un fichier SQL, peut importe où se trouve la requête (procédure stockée ou dans le .sql))

    Si tu souhaites l'avoir sur le serveur il faut explorer d'autre piste (utl_file par exemple).



    Si on est dans le premier cas, le plus simple est de mettre la requête directement dans le fichier .SQL comme tu l'as présenté au tout début.

    Pourquoi cherches tu as utiliser une procédure stocker pour générer ton fichier plat ? Parce que tu cherches à le générer sur le serveur ?


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Et oui, je cherche à générer le fichier plat sur le serveur.

  9. #9
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Dans ce cas, regarde par exemple: http://asktom.oracle.com/pls/ask/f?p...D:235814350980


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    dans ce cas, recherche UTL_FILE sur le forum, tu verras des exemples.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2014, 10h47
  2. Réponses: 0
    Dernier message: 27/04/2009, 16h13
  3. [SQL-Server] Sous requete dans une procédure stockée
    Par Worldofdada dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/02/2006, 11h18
  4. Réponses: 3
    Dernier message: 17/01/2006, 17h12
  5. SQL dynamique dans une procédure stockée
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2005, 15h17

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