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

SQL Oracle Discussion :

Function d'incrément automatique avec update de table


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Function d'incrément automatique avec update de table
    Bonjour,
    J'ai une table avec 2 champs : Annee & compteur
    Je souhaite disposer d'une fonction qui en fonction de l'année passée en paramètre :
    - incrémente le "compteur" de l'enregistrement correspondant à l'année passée en paramètre
    - renvoi la valeur du compteur

    Je pratique un peu SQL+ mais je suis tout de même novice donc merci d'avance pour votre aide et votre compréhension.
    BigFellow

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE FUNCTION F_COMPTEUR (p_annee IN NUMBER)
    RETURN NUMBER IS
    	v_compteur NUMBER;
    BEGIN
    	UPDATE PANNEE
    	SET compteur = compteur  + 1
    	WHERE annee = p_annee
    	RETURNING compteur INTO v_compteur;
    	RETURN v_compteur;
    END;

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Merci c'est presque bon...
    J'ai fait cela :

    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
     
    SQL> desc wkfl_compteur
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     IDENTIFIANT                               NOT NULL NUMBER(10)
     ANNEE                                     NOT NULL NVARCHAR2(10)
     
    SQL> select * from wkfl_compteur;
     
    IDENTIFIANT ANNEE
    ----------- ----------
              2 2008
              1 2009
              2 2010
              1 2011
              1 2012
              1 2013
              1 2014
              1 2015
     
    8 ligne(s) sélectionnée(s).
     
    SQL> CREATE OR REPLACE FUNCTION F_COMPTEUR (p_annee IN NVARCHAR2)
      2  RETURN NUMBER IS
      3   v_compteur NUMBER;
      4  BEGIN
      5   UPDATE wkfl_compteur
      6   SET IDENTIFIANT = IDENTIFIANT + 1
      7   WHERE ANNEE like p_annee
      8   RETURNING IDENTIFIANT INTO v_compteur;
      9   RETURN v_compteur;
     10  END;
     11  /
     
    Fonction créée.
     
    SQL> select F_Compteur('2008') from DUAL;
    select F_Compteur('2008') from DUAL
           *
    ERREUR à la ligne 1 :
    ORA-14551: impossible d'effectuer une opération DML dans une interrogation
    ORA-06512: à "IEDOM.F_COMPTEUR", ligne 5
    Mais j'ai toujours une erreur et je ne sais pas comment l'interpréter :-(
    Merci d'avance pour votre aide.
    BigFellow

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Une fonction utilisée dans un select ne peut pas faire d'UPDATE/INSERT/DELETE.

    faut utiliser du PL et faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable := F_Compteur('2008');

  5. #5
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Bonjour,

    J'avais aussi le même message d'erreur dans un autre cas; Merci McM pour l'explication

    LBO72.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/06/2011, 14h12
  2. [SSIS] [2K5] Chargement de table avec update
    Par hayassinet dans le forum SSIS
    Réponses: 4
    Dernier message: 12/06/2009, 15h30
  3. Incrémenter un champ numérique avec UPDATE
    Par boteha dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/02/2009, 09h31
  4. Trigger avec update sur même table
    Par Thig dans le forum PL/SQL
    Réponses: 7
    Dernier message: 31/08/2007, 14h45
  5. [MySQL] Insertion de code HTML dans une table, avec UPDATE
    Par Daedalus31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/02/2007, 12h19

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