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 23/08/2006, 01h01   #1
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 62
Points : 30
Points : 30
Par défaut trigger et sql manager lite 2005

bonjour,

je connais Firebird depuis trois jours et je suis bloquer par un probleme stupide (enfin je pense!).

Je dois creer un script qui genere le schema de la base de donnees. La base de donnees est donc Firebird et le GUI SQL Manager Lite 2005. Pas de soucis avec des CREATE TABLE, les INDEX etc... par contre les TRIGGER ne passent pas!
J'utilise SQL Manager 2005 Lite comme GUI.

Je genere le code suivant a partir de l'editeur de TRIGGER :

CREATE TRIGGER CONF_TRIGGER FOR TABLE
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.MonID IS NULL)
THEN NEW.MonID = GEN_ID (conf_generator,1);
END;

ou conf_generator est un generateur.

* Quand je copie cette requete dans le fichier qui contient toutes les requetes pour generer le schema de la base de donnees, et que je l'ouvre dans le SQL Editor, FireBird bloque sur le TRIGGER.

* Quand je met 2 triggers dans le SQL editor et que je clique sur Execute Query , il bloque sur le 2e.

* Quans j'en met un seul et que je clique sur "Explain Query" , j'obtiens le message d'erreur suivant :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command.

* Dans la meme situation que le point precedent, mais avec le bouton Execute Query, l'action se deroule correctement

voila, j'ai essaye d'etre le plus precis possible.
Desole pour les accents, je n'en ai pas sur mon clavier.
Merci,
Matthias
]matmat[ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 09h01   #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
voilà :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
SET TERM ^^;
CREATE TRIGGER CONF_TRIGGER FOR TABLE
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.MonID IS NULL)
THEN NEW.MonID = GEN_ID (conf_generator,1);
END;
SET TERM ;^^
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 18h33   #3
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 62
Points : 30
Points : 30
Par défaut merci mais ca ne marche toujours pas

Merci Phillippe
mon nouveau code est donc :
Code :
1
2
3
4
5
6
7
8
9
10
SET TERM ^^;
CREATE TRIGGER CONF_TRIGGER FOR CONFIG
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.CONFIGID IS NULL)
THEN NEW.CONFID = GEN_ID (conf_generator,1);
END;
SET TERM ;^^
Le message d'erreur que j'obtient est :
Citation:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 9, char 1.
SET.
En cherchant un peu a quoi correspondait SET TERM j'ai trouve plein de fornulations differentes :
SET TERM ^^;
SET TERM ^;
SET TERM $$;
SET TERM !!;
A quoi correspond ces differences? Est-ce que c'est lie au dialecte utilise? J'ai choisi les dialectes 3 parcequ'il comprend le type BIGINT que j'utilise a l'origine dans la bdd MySQL que je suis en train de migrer vers FireBird.
]matmat[ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 19h05   #4
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 62
Points : 30
Points : 30
Par défaut maintenant ca marche, mais je voudrais comprendre pourquoi ?!#@

j'ai remplace les ^^ que Philipe m'avait conseille par des !!
La requete devient donc :

Code :
1
2
3
4
5
6
7
8
9
10
SET TERM !! ;
CREATE TRIGGER CONF_TRIGGER FOR CONFI
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.CONFID IS NULL)
THEN NEW.CONFID = GEN_ID (conf_generator,1);
END !!
SET TERM ; !!
Y-a-t'il un document sur le net qui explique dans quel cas utiliser ^, ! ou $ ?
]matmat[ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 00h01   #5
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
Citation:
Envoyé par ]matmat[
j

Y-a-t'il un document sur le net qui explique dans quel cas utiliser ^, ! ou $ ?
c'est pareil, j'avais juste oublié dans le code transmis de remplacer le dernier END; par END^^
SET TERM permet de définir le ou les caractères qui indique au parseur que la commande est terminée, complète
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski 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 07h55.


 
 
 
 
Partenaires

Hébergement Web