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 :

[PL/SQL Oracle 9i] décrémenter une séquence dans un trigger


Sujet :

Oracle

  1. #1
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut [PL/SQL Oracle 9i] décrémenter une séquence dans un trigger
    Bonjour!

    Je sèche depuis quelques temps... j'ai une table test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table tb_test (
    	pk_test number(6),
    	champ varchar2(30),
    	constraint ct_pk_test primary key (pk_test)
    );
    lorsque j'insère des données dans cette table, un trigger se déclenche
    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
     
    create or replace trigger tr_essai
    before insert on tb_test
    for each row
    declare
    max_pk number;
    sequ number;
    begin
     	select max(pk_test) into max_pk from tb_test;
    	select sq_incr.currval into sequ from dual;
    	if max_pk>sequ then
    		loop
    			exit when sequ=max_pk+1;
    			select sq_incr.nextval into sequ from dual;
    		end loop;
    	else
    		loop
    			?????????
                            ?????????
    		end loop;
    	end if;
    	:new.pk_test:=sequ;
    end;
    /
    ce que j'aimerais, c'est que lorsque j'insère des données avec ma sequence sq_incr, si il existe des clé primaires suppérieures à la valeur de ma séquence, celle-ci s'incrémente jusqu'à avoir la valeur maximum+1. ça, c'est bon. maintenant, comment faire pour décrémenter la séquence, lorsqu'aucun enregistrement ce trouve dans ma table (par exemple) et que ma séquence en est à 354 (toujours pas exemple)??? quelqu'un aurait une idée???

  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
    On ne peut pas décrémenter une séquence Oracle. Il faut la recréer.

  3. #3
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    ach... tant pis, merci quand même.

  4. #4
    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
    Mais franchement, vu le type d'utilisation que vous comptez faire de cette séquence ( incrémentation forcée, décrémentation...)
    autant vous en passer et gérer la PK avec le MAX() !

  5. #5
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    j'y avais même pas pensé... merci!
    A force de toujours chercher la petite bête, je manque le plus facile qui est gros comme une maison!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/07/2007, 15h22
  2. Réponses: 6
    Dernier message: 19/09/2006, 09h12
  3. [Oracle] aide sur une requète dans un count
    Par d_token dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/09/2006, 15h32
  4. Réponses: 1
    Dernier message: 12/05/2006, 17h07
  5. [Oracle] utilisation d'une séquence
    Par magic charly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/04/2006, 09h39

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