Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 13/07/2006, 10h55   #1
Invité de passage
 
Inscription : juin 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 21
Points : 1
Points : 1
Par défaut probléme de générateur

Bonjour,

j'utilise interbase et j'ai un problème
j'ai rajouté une colonne ID_DETAIL_COM INTEGER NOT NULL dans une table ou il y a deja des données (+ de 2000) en fait je voudré l'acrementer de 1 pour chaque ligne donc j'ai fait une procedure stockée et j'ai créé une générateur voici ma procedure stockée :

Code :
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
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
 
/* Stored procedures */
 
CREATE PROCEDURE DONNE_NUM_DETAIL_COM 
RETURNS
(
  ID_DETAIL_COM INTEGER
)
AS
BEGIN EXIT; END ^
 
 
ALTER PROCEDURE DONNE_NUM_DETAIL_COM 
RETURNS
(
  ID_DETAIL_COM INTEGER
)
AS
BEGIN
UPDATE DETAIL_COMMANDE
SET ID_DETAIL_COM = GEN_ID(GEN_DETAIL_COM, 1)
WHERE ID_DETAIL_COM = 0;
END
 ^
 
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
et suand je fait :
Code :
execute procedure DONNE_NUM_DETAIL_COM
et bien dans ma table il y a encore que des 0....
alors qu'il devrait s'acrementer de 1
si qq a la solution merci d'avance
krole57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 22h58   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
La solution est de faire un trigger :
Code :
1
2
3
4
5
6
7
8
9
SET TERM ^^ ;
CREATE TRIGGER DETAIL_COMMANDE_1 FOR DETAIL_COMMANDE ACTIVE BEFORE UPDATE POSITION 1 AS
begin
  IF (new.ID_DETAIL_COM IS NULL)
  then new.ID_DETAIL_COM = gen_id(GEN_DETAIL_COM, 1);
 
end
^^
SET TERM ; ^^
puis ensuite un UPDATE :
Code :
UPDATE DETAIL_COMMANDE SET ID_DETAIL_COM = NULL;
et voilà, tu peux détruire ton trigger
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 09h56   #3
Invité de passage
 
Inscription : juin 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 21
Points : 1
Points : 1
OUPSSSSSSSSS j'ai essayé et ca m'a vidé ma table
krole57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 10h05   #4
Invité de passage
 
Inscription : juin 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 21
Points : 1
Points : 1
non en fait je di des betise ca marche tres bien et merci bcp
krole57 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 10h59.


 
 
 
 
Partenaires

Hébergement Web