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 :

Raise Application error


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Raise Application error
    Bonjour ,

    J ai une table employé ; emp : id , nom , prenom

    J'aimerai savoir si la fonction application_raise_error : arrete le reste du processus ou seulement indique le message d'erreur et continue le processus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create trigger insert_employe
    before insert on emp
    for each row
     
    begin
    if :NEW.id < 0
    then raise_application_error (-20600, 'idnegatif')
    end if
    end;
    merci

    Par exemple j ai une suite d insertion a réaliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into emp values (1,'toto','tata')
    insert into emp values (-1,'tete','tyty')
    insert into emp values (2,'titi','tutu')
    Il insere le premiere et le troisieme? ou alors aucun.? merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Le premier insert marque le début de la transaction.
    Où est la fin ?
    Le savoir est une nourriture qui exige des efforts.

  3. #3
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    je ne comprends pas trop ,c'est pour apprendre , j'ai juste juste cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into emp values (1,'toto','tata')
    insert into emp values (-1,'tete','tyty')
    insert into emp values (2,'titi','tutu')
    Est ce que l'insertion de la première et 3 eme ligne se fera ?

    ou alors ca sera annulée en raison de l erreur

    c est cela ma question

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par azzimu Voir le message
    c'est pour apprendre
    L'erreur et les tests sont les meilleurs pédagogues. Fonce.
    Le savoir est une nourriture qui exige des efforts.

  5. #5
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    merci pour vos réponses

    seulement je n'utilise pas oracle, je trouve cela assez compliqué a prendre en main.

    Selon ce que j'ai compris , cela n insere aucune donnée des que raise_application_error est lancé ??

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par azzimu Voir le message
    seulement je n'utilise pas oracle,
    Tu poste sur un forum Oracle en tentant d'apprendre sans utiliser Oracle

    Citation Envoyé par azzimu Voir le message
    je trouve cela assez compliqué a prendre en main.
    Ce qui est compliqué c'est ce qu'on ne connais pas.
    Pour connaitre il faut faire le premier pas

    Pour télécharger un MV virtual box pour s'autoformer c'est ici https://www.oracle.com/technetwork/c...l-2415742.html
    Le savoir est une nourriture qui exige des efforts.

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    RAISE_APPLICATION_ERROR renvoie une une exception au mettre titre que n'importe quelle autre erreur.
    Après concernant le comportement avec 3 INSERT, ça va dépendre du contexte d'exécution.
    Par exemple, si ce sont 3 INSERT unitaires, seul celui qui plante n'est pas enregistré, si c'est un bloc de 3 INSERT, le bloc est annulé.
    C'est facile de réaliser un jeu de test pour étudier un comportement :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    SQL> drop table t;
     
    Table supprimee.
     
    SQL> create table t (id number(10));
     
    Table creee.
     
    SQL> create trigger insert_employe
    before insert on t
    for each row
    begin
        if :NEW.id < 0then
            raise_application_error (-20600, 'idnegatif');
        end if;
    end;
    /  2    3    4    5    6    7    8    9
     
    Declencheur cree.
     
    SQL> insert into t values (1);
     
    1 ligne creee.
     
    SQL> insert into t values (-1);
    insert into t values (-1)
                *
    ERREUR a la ligne 1 :
    ORA-20600: idnegatif
    ORA-06512: a "SKUATAMAD.INSERT_EMPLOYE", ligne 3
    ORA-04088: erreur lors d'execution du declencheur 'SKUATAMAD.INSERT_EMPLOYE'
     
     
    SQL> select * from t;
     
            ID
    ----------
             1
     
    SQL> insert into t values (2);
     
    1 ligne creee.
     
    SQL> select * from t;
     
            ID
    ----------
             1
             2
     
    SQL> rollback;
     
    Annulation (rollback) effectuee.
     
    SQL> select * from t;
     
    aucune ligne selectionnee
     
    SQL> begin
    insert into t values (1);
    insert into t values (-1);
    insert into t values (2);
    commit;
    end;  2    3    4    5    6
      7  /
    begin
    *
    ERREUR a la ligne 1 :
    ORA-20600: idnegatif
    ORA-06512: a "SKUATAMAD.INSERT_EMPLOYE", ligne 3
    ORA-04088: erreur lors d'execution du declencheur 'SKUATAMAD.INSERT_EMPLOYE'
    ORA-06512: a ligne 3
     
     
    SQL> select * from t;
     
    aucune ligne selectionnee
     
    SQL>
    Regardez également cette discussion avec plein d'autres cas intéressant :
    Prévoir un Rollback dans une procédure

  8. #8
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    merci skuatamad pour votre réponse , c'est bien plus clair

Discussions similaires

  1. [ZF 1.7] Application error lors d'un save()
    Par gostbuster dans le forum Zend_Db
    Réponses: 1
    Dernier message: 30/03/2009, 18h20
  2. Raise Application Error
    Par toony94 dans le forum SQL
    Réponses: 4
    Dernier message: 13/06/2008, 15h57
  3. Server Application Error
    Par naima2005 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 03/01/2008, 12h22
  4. [IIS 5.1] Server Application Error
    Par sami_c dans le forum IIS
    Réponses: 3
    Dernier message: 07/05/2007, 21h49
  5. Server Application Error
    Par __fabrice dans le forum ASP
    Réponses: 5
    Dernier message: 22/08/2005, 11h22

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