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 :

Gestion des erreurs Sybase > Oracle


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Par défaut Gestion des erreurs Sybase > Oracle
    Bonjour à tous,

    j'ai actuellement une base sous Sybase composée de procédures stockées.
    Je souhaite migrer ma base Sybase vers Oracle néanmoins je souhaitais savoir comment les erreurs vont être traitées ?

    Je vous met ci dessous une de mes nombreuses procédures stockées.


    Code sql : 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
    create procedure proc_validate_ident   
    as    
     
    declare @ERREUR int   
     
     
    delete IDENTIFICATION FROM TEMPIDENT , IDENTIFICATION   
    where TEMPIDENT.TEMPIDENT_IDENT = IDENTIFICATION.IDENT_IDENT   
     
    select @ERREUR = @@ERROR   
     
    IF (@ERREUR = 0)   
    begin   
      INSERT IDENTIFICATION (IDENT_IDENT,IDENT_GENRE,IDENT_NOM,IDENT_ADR1,IDENT_ADR2,   
      IDENT_ADR3,IDENT_ADR4,IDENT_CIGAP,IDENT_NUMSS,IDENT_DATEMOUV)   
      SELECT TEMPIDENT_IDENT,TEMPIDENT_GENRE,TEMPIDENT_NOM,TEMPIDENT_ADR1,TEMPIDENT_ADR2,   
      TEMPIDENT_ADR3,TEMPIDENT_ADR4,TEMPIDENT_CIGAP,TEMPIDENT_NUMSS,TEMPIDENT_DATEMOUV   
      FROM TEMPIDENT   
     
    end   
    else   
    begin   
        print "Probleme avec la table IDENTIFICATION "   
        return   
    end


    Par exemple, je n'ai aucune idée dont va être traité ma ligne :

    " select @ERREUR = @@ERROR " sous entendu le @@ERROR retourne un code erreur, ce qui m'intéresse ici, c'est le cas ou il n'y a pas d'erreur, le cas ou il retourne 0 en clair.

    Je souhaiterais avoir de l'aide ou de la doc pour avancer dans mon projet de migration..

    Merci à tous,

    NarbOni

  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
    Oracle != Sysbase.
    Vous devez réécrire vos procédures en PL/SQL. Il y a un tutoriel PL/SQL sur ce site.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Par défaut
    Oui jusque là j'avais compris, il va falloir réécrire pour passer de Transact-SQL à Pl/Sql, néanmoins, ça ne m'explique pas de tout comment gérer les erreurs en Pl/Sql ... ? Comparé au retour erreur en Transact-SQL.

  4. #4
    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
    Bah c’est plus compliqué que ça en réalité.
    Pour moi votre procédure devient
    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
     
    CREATE procedure proc_validate_ident   
    AS       
    Begin
      Delete IDENTIFICATION
      Where Exists (Select Null
                      From TEMPIDENT
                     Where  TEMPIDENT.TEMPIDENT_IDENT = IDENTIFICATION.IDENT_IDENT
      --  
      INSERT IDENTIFICATION (IDENT_IDENT,IDENT_GENRE,IDENT_NOM,IDENT_ADR1,IDENT_ADR2,   
                             IDENT_ADR3,IDENT_ADR4,IDENT_CIGAP,IDENT_NUMSS,IDENT_DATEMOUV)   
      SELECT TEMPIDENT_IDENT,TEMPIDENT_GENRE,TEMPIDENT_NOM,TEMPIDENT_ADR1,TEMPIDENT_ADR2,   
             TEMPIDENT_ADR3,TEMPIDENT_ADR4,TEMPIDENT_CIGAP,TEMPIDENT_NUMSS,TEMPIDENT_DATEMOUV   
      FROM TEMPIDENT ;
    End;       
    /
    Et comme vous pouvez le constaté je ne ressens le moindre besoin d’ajouter un gestionnaire des exceptions en cas d’anomalie.
    Mais est-ce que j'ai bien compris votre code Transact SQL (c'es un langage que je ne maîtrise pas) ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Par défaut
    En fait, nous faisons une suppression et dans le SELECT on y indique un code erreur ( Nous avons 0 si la suppression de la table s'est déroulée correctement et un autre chiffre peut importe le nombre vu que ce n'est pas correct ).

    Si la suppression s'est correctement déroulée on procède à la création et insertion, sinon, nous avons un message nous annonçant que nous avons eu un problème lors de la suppression.

    Ce que je souhaitais savoir c'est si nous avions la possibilité de gérer ce 'code retour' afin de savoir si la suppression s'exécute comme il faut, et si ce n'est pas le cas, m'avertir du problème ?

    Encore merci,
    NarbOni.

  6. #6
    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
    C'est une autre philosophie avec Oracle. Vous supprimez les donnés via delete. Si une erreur se produit alors une exception sera levée et l'insertion ne va pas poursuivre. Sinon la procédure continue avec l'insertion. C'est le code que j'ai vous aie proposé.

    Maintenant, le code de retour ne sert à rien. Si une exception est levée, par le delete ou par l'insert, comme elle n'est pas intercepté par la procédure elle est envoyé automatiquement au code appelant. C'est peut être à ce code appelant d'intercepter l'exception et de la traiter.

Discussions similaires

  1. [Oracle] gestion des erreurs Oracle
    Par patk29 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/05/2008, 11h14
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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