Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2008, 13h14   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 2
Points : 2
Par défaut [Débutant+] Trigger un peu spécifique.

Hello!

Je cherche à faire un trigger un peu spécifique, sur une base de donnée Oracle. J'ai une table qui est comme ceci :

Citation:
TABLE ( date, idUtilisateur, iLigne, CP, H)
la primary key est l'ensemble {date, #idUtilisateur, iLigne}, avec idutilisateur la PK d'une autre table. Bref.
J'aimerais faire un trigger qui avant chaque insertion dans cette table TABLE, vérifie s'il existe déjà une ligne avec le même couple d'attributs date et idUtilisateur que l'on cherche et insérer, et si c'est le cas, insérer donc une nouvelle ligne mais en incrémentant de +1 l'attribut iLigne par rapport à la valeur de la ligne correspondante.

Help, mes amis! C'est du trop gros PL/SQL for me..


Je developpe avec JDev11g mais je gére la db Oracle avec sqldevelopper 1.5.0.52
Enkvist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 13h50   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Pas besoin d'un trigger, utilise une séquence pour alimenter iLigne.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 14h03   #3
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 2
Points : 2
Yep. En plus je suis bête cet exemple était déjà dans la faq... (shame on me)

J'ai donc copier collé, modifié, ce qui donne ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE SEQUENCE SEQ_CRAH_ILIGNE_AUTO_INCREMENT
  START WITH 1
  MAXVALUE 99
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;
 
CREATE TRIGGER TRG_CRAH_ILIGNE
   BEFORE INSERT
   ON CRAH
   FOR EACH ROW
BEGIN
   SELECT SEQ_CRAH_ILIGNE_AUTO_INCREMENT.NEXTVAL
     INTO :NEW.ILIGNE_PK
     FROM DUAL
     WHERE ********;
END;

Donc cela va bien s'incrémenter. C'est bien, et c'est même suffisant. J'aurais juste aimé que cela s'incrémente en fonction du couple {DATE, IDUSER}, mais bon je pinaille.

Merci mister mnitu
Enkvist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2008, 14h48   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
La seule façon de faire ça correctement passe par une table de gestion d’un compteur. Mais cette solution est très peu « scalable ».
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h20.


 
 
 
 
Partenaires

Hébergement Web