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

Langage SQL Discussion :

[PL/SQL - Trigger Oracle] Données non retournées


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de Hug0_76
    Profil pro
    Inscrit en
    Août 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 292
    Points : 332
    Points
    332
    Par défaut [PL/SQL - Trigger Oracle] Données non retournées
    Bonsoir à tous,

    Je suis actuellement en train de créer une petite application pour laquelle j'ai crée un trigger (base de donnée Oracle), dont voici le code :

    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
     
    create or replace trigger Maj_compte
      before delete or update or insert on operations  
      for each row
     
    declare
      old_somme Operations.somme%TYPE DEFAULT 0;
      somme_tmp Operations.somme%TYPE DEFAULT 0;
    begin
     
       IF DELETING THEN
    			SELECT somme INTO somme_tmp FROM Operations WHERE id_operation = :OLD.id_operation;
    			UPDATE Compte SET solde = (solde - somme_tmp) WHERE id_compte = ':OLD.id_compte';
    		END IF;
     
    		IF INSERTING THEN
    			SELECT somme INTO somme_tmp FROM Operations WHERE id_operation = :NEW.id_operation;
    			UPDATE Compte SET solde = (solde + somme_tmp) WHERE id_compte = ':NEW.id_compte';
    		END IF;
     
    		IF UPDATING THEN
    			SELECT somme INTO old_somme FROM Operations WHERE id_operation = :OLD.id_operation;
    			IF old_somme > :OLD.somme THEN
    				UPDATE Compte SET solde = (solde - (old_somme - :OLD.somme)) WHERE id_compte = ':NEW.id_compte';
    			ELSE
    				UPDATE Compte SET solde = (solde + (:OLD.somme - old_somme)) WHERE id_compte = ':NEW.id_compte';
    			END IF;
    		END IF;
     
     
    end Maj_compte;
    Mais dès que je fais une transaction sur la table Operations, Oracle me renvoie l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ORA-01403: aucune donnée trouvée
    ORA-06512: à "HUGO.MAJ_COMPTE", ligne 12
    ORA-04088: erreur lors d'exécution du déclencheur 'HUGO.MAJ_COMPTE'
    Cela commence à me gaver et je n'arrive pas à comprendre mon erreur.
    Voici les tables concernées :

    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
     
     
    CREATE TABLE Compte (
    	id_compte	VARCHAR(15) NOT NULL PRIMARY KEY,
    	type		VARCHAR(20) NOT NULL,
    	nom_banque	VARCHAR(20) NOT NULL,
    	solde		FLOAT NOT NULL,
    	id_client	INTEGER NOT NULL
    );
     
     
    CREATE TABLE Operations (
    	id_operation	INTEGER NOT NULL PRIMARY KEY,
    	type_operation	VARCHAR(6) NOT NULL,
    	date_operation	Date NOT NULL,
    	libelle		VARCHAR(50) NOT NULL,
    	somme		FLOAT NOT NULL,
    	id_compte	VARCHAR(15) NOT NULL
    );
    Si vous avez des petits coups de pouces à me donner je serai ravi.
    Merci
    Si la connerie de certain fonctionnait au gazole il y aurait pénurie !!!!

    Lao Tzeu a dit : "Il faut trouver la voix"...Si tu ne l'as pas trouvé, je vais t'aider en te coupant la tête.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ce n'est pas lié à la structure de vos tables mais à leur contenu : la 1ère erreur que vous obtenez est un grand classique
    ORA-01403: aucune donnée trouvée
    La requête SELECT que vous effectuez ne retourne aucune donnée (cf. le message d'erreur) et vous devez par conséquent gérer cette exception en encapsulant votre requête dans un bloc BEGIN... END :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
    SELECT ...
    EXCEPTION WHEN NO_DATA_FOUND THEN
    ...
    END;
     
    ...
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre averti Avatar de Hug0_76
    Profil pro
    Inscrit en
    Août 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 292
    Points : 332
    Points
    332
    Par défaut
    merci de la réponse,
    c'était exactement ca.
    Je n'avais pas du tout pensé à attraper les exceptions.

    encore merci
    Si la connerie de certain fonctionnait au gazole il y aurait pénurie !!!!

    Lao Tzeu a dit : "Il faut trouver la voix"...Si tu ne l'as pas trouvé, je vais t'aider en te coupant la tête.

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

Discussions similaires

  1. [Oracle] lignes non retournées
    Par darkangel23fr dans le forum SQL
    Réponses: 3
    Dernier message: 17/02/2009, 14h12
  2. [pl/sql] probleme trigger oracle
    Par john123 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/12/2007, 19h27
  3. Réponses: 7
    Dernier message: 09/11/2007, 16h53
  4. [Sql server][Oracle]Migration base de donnée.
    Par WELCOMSMAIL dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 23/05/2006, 21h19
  5. [SQL SERVER/ORACLE] Comment migrer les données?
    Par ducho dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/12/2005, 11h18

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