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 :

Execute immediate d'un bloc de sql


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut Execute immediate d'un bloc de sql
    Bonjour !

    Voilà, j'essaye de mettre en place au sein de mon projet une procédure qui va décider d'une installation from scratch, ou alors d'un update.
    L'idée est donc de vérifier si une table existe, si oui du numéro de version de la base de donnée courante, et en fonction de tout ça j'exécute soit la série de scripts SQL pour le from scratch, ou alors les scripts SQL pour l'update de la base de données.

    Mais je suis bloqué. Comment exécuter un fichier SQL au sein d'une procédure ?
    @file.sql ne fonctionne pas, execute immediate file.sql non plus, bref, je ne sais pas comment m'y prendre...

    (L'idée c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                  SELECT count(table_name) into bdTableNumber FROM user_tables;
                  if bdTableNumber > 0 THEN
                      DBMS_OUTPUT.PUT_LINE('Update DB.');
                      @update/01-update_struct.sql;
                  ELSE
                      DBMS_OUTPUT.PUT_LINE('Create DB.');
                      @install/01-create_struct.sql;
                  END IF;
    Auriez vous une idée ? Merciiii !

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ce quoi votre version d'Oracle ?

    Il n’est pas possible d’exécuter directement à partir d’une procédure PL/SQL un fichier via SQL.
    Par contre il est possible soit d’intégrer les tests d’existence dans les scripts sql soit d’intégrer le contenu des scripts dans la procédure via le sql dynamique.
    Il est également possible à partir de la version 10g de programmer l’exécution via DBMS_SCHEDULER d’un script shell. Dans toutes les versions il est également possible d’exécuter une procédure externe (programme écrite en Java ou C/C++) dans PL/SQL.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    En SQL tu pourrais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    COL file_name new_value file_name
    SELECT DECODE(COUNT(1),0,'UPDATE/01-update_struct.sql', 'install/01-create_struct.sql') file_name
      FROM user_tables;
    @&file_name

  4. #4
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut
    Merci pour vos réponses !

    Ma procédure ne fait pas uniquement ça... Elle va aussi faire des vérifications préalables sur des privilèges, et ce genre de chose... Et en fonction de toutes ces vérifications, j'exécute des scripts SQL, ou pas... Mais je note la requête orafrance, merci !!!

    Sinon, ce qui me dérange avec le sql dynamique est que vue la taille des scripts j'aurais voulu les externaliser.

    En fait cette procédure est exécutée par sqlplus, via un script shell. Est-il possible, plutot que de vouloir exécuter ces scripts dans la procédure, de faire retourner à ma procédure une valeur que je pourrais interpréter au sein du shell ? Il ne me suffirait plus qu'à relancer sqlplus avec uniquement les scripts sql en fonction de la valeur retournée par la procédure ?
    Mais je ne vois pas comment faire... (oui, je débute totalement... )

  5. #5
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut
    J'annule ma question...
    J'ai trouvé ça :

    http://www.developpez.net/forums/d20...ql-shell-unix/

    C'est sans doute le plus simple en l'occurence non ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ca peut aider en effet

  7. #7
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut
    Merci bien en tout cas, je passe en Résolu !

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

Discussions similaires

  1. EXECUTE IMMEDIATE et Compilation sous Oracle Sql Developer
    Par abdelhamidem dans le forum PL/SQL
    Réponses: 3
    Dernier message: 16/09/2008, 17h01
  2. SQl loader et execute immediate
    Par salim_kwada dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 31/08/2006, 13h30
  3. [PL/SQL] EXECUTE IMMEDIATE et INSERT et RETURNING
    Par swirtel dans le forum Oracle
    Réponses: 2
    Dernier message: 18/04/2006, 09h25
  4. [PL/SQL] Execute immediate
    Par BiM dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/08/2005, 11h13
  5. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37

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