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 :

[8i]contrôle de scripts de création


Sujet :

Oracle

  1. #1
    Membre averti Avatar de vintz72
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 154
    Points : 316
    Points
    316
    Par défaut [8i]contrôle de scripts de création
    Bonjour,

    problème tout bête, mais insoluble avec Oracle (enfin, j'ai l'impression pour le moment).

    Pour livrer les évolutions de la base, je veux livrer des scripts PL/SQL de mise à jour. Ayant une table de suivi des révisions, je veux la mettre à jour à l'occasion, mais indiquer dedans si j'ai rencontrer un problème (ça parait pas compliqué). Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    -- On trace les modifications de la base
    INSERT INTO SGO_REVISION (SGR_ID, SGR_VERSION, SGR_REVISION, SGR_STATUT, SGR_COMMENT)
    	VALUES ((select max(sgr_id)+1 from sgo_revision), 'V3', 'V3.0.4', 'EC', 'Evolutions);
     
    -- Application des modifications
    @./impact/update_base.sql;
    @./functions/nouvelle_fonction.sql;
     
    -- il faudrait faire cela qu'en cas de succès mais on ne peut pas
    -- mettre un begin / exception / end sans qu'Oracle gueule (ou il y a une astuce ?)
    UPDATE SGO_REVISION SET SGR_STATUT='FI' where SGR_ID = (select max(SGR_ID) from SGO_REVISION);
    En gros, si je mets des begin / end / transaction, sqlplus me jette sur le premier create rencontré dans le script update_base.sql en disant qu'il ne l'attend pas là !!

    HELP ! C'est quoi le secret ?? Migrer en Oracle plus récent ? Et sinon ?

  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
    Begin ... End; sert à encadrer un block PL/SQL.
    Dans ce cas, vous auriez interêt à passer vos ordres de DML via du sql dynamique (execute immediate).

    Sinon, dans un script SQL*Plus, vous pouvez tester le bon déroulement des ordres SQL et arrêter le traitement en cas d'erreur.

  3. #3
    Membre averti Avatar de vintz72
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 154
    Points : 316
    Points
    316
    Par défaut
    Le "sinon" me semble intéressant. Mais concrètement, comment fait-on ce genre de contrôle ?
    Merci de votre aide.

  4. #4
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 674
    Points
    674
    Par défaut
    Avec ce genre de controles, probablement:

    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
    31
     
    VARIABLE mesg          VARCHAR2(1000);
    VARIABLE program_error VARCHAR2(1);
     
    WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
    WHENEVER OSERROR  EXIT FAILURE ROLLBACK;
     
    DECLARE
     
    BEGIN
     
    --
    -- Pgm body
    --
     
    :mesg := 'Program successfully completed';
     
    EXCEPTION
    WHEN OTHERS         THEN
    :mesg          := 'ERROR: '||sqlerrm;
    :program_error := 'Y';
    END;
    /
    PRINT mesg
     
    BEGIN
    IF :program_error = 'Y' THEN
      RAISE program_error;
    END IF;
    END;
    /

Discussions similaires

  1. [VB][Excel]Script de création de colonne
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/09/2005, 13h56
  2. Script de création de base
    Par andlio dans le forum Oracle
    Réponses: 20
    Dernier message: 20/07/2005, 13h39
  3. passage nom des contraintes de MPD au script de création BD
    Par marièmdiaw dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 14/01/2005, 13h18
  4. [IBExpert]Recuperer le script de création de la BD ?
    Par Sitting Bull dans le forum Outils
    Réponses: 2
    Dernier message: 01/10/2004, 11h15
  5. Réponses: 3
    Dernier message: 24/10/2003, 21h46

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