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 19/11/2007, 21h39   #1
Membre du Club
 
Inscription : avril 2002
Messages : 74
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 74
Points : 44
Points : 44
Par défaut ALTER TRIGGER avec FB 2.1

Bonjour à tous,

J'utilise un script de versionning qui passe bien avec Firebird 1.5.
Mais qui ne paasse pas sous Firebird 2.1. (béta 2).

Voilà à quoi il ressemble :

Code :
1
2
3
4
5
6
ALTER TRIGGER ON_SUPP_X AFTER DELETE POSITION 0 AS BEGIN
UPDATE T_Y SET T_Y.CLE_X = 1
WHERE T_Y.CLE_X = T_X.CLE_X; 
UPDATE T_Z SET T_Z.CLE_X = 1
WHERE T_Z.CLE_X = T_X.CLE_X; 
END
Suite à une recherche ici même, j'ai essayé plusieurs choses en utilisant, ou pas, le mot clé OLD, mais je ne trouve pas d'où vient le problème.

Si vous avez une idée, ce ne serait pas de refus
__________________
seb
Seb des Monts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 22h56   #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
sur quelle table ce trigger ?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 23h26   #3
Membre du Club
 
Inscription : avril 2002
Messages : 74
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 74
Points : 44
Points : 44
merci d'avoir jeté un oeil

Le trigger est sur la table T_X :

Code :
1
2
3
4
5
6
7
8
CREATE TRIGGER ON_SUPP_X FOR T_X
AFTER DELETE POSITION 0 AS 
BEGIN
UPDATE T_Y SET T_Y.CLE_X = 1
WHERE T_Y.CLE_X = T_X.CLE_X; 
UPDATE T_Z SET T_Z.CLE_X = 1
WHERE T_Z.CLE_X = T_X.CLE_X; 
END
J'arrive bien à créer un trigger avec l'éditeur de IBOConsole, mais je ne parviens pas à le créer via une requête SQL...
__________________
seb
Seb des Monts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 08h58   #4
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
Code :
1
2
3
4
5
6
7
8
9
10
11
SET TERM  ^^ ;
CREATE TRIGGER ON_SUPP_X FOR T_X
AFTER DELETE POSITION 0 AS 
BEGIN
UPDATE T_Y SET T_Y.CLE_X = 1
WHERE T_Y.CLE_X = OLD.CLE_X; 
UPDATE T_Z SET T_Z.CLE_X = 1
WHERE T_Z.CLE_X = OLD.CLE_X; 
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 20/11/2007, 10h04   #5
Membre du Club
 
Inscription : avril 2002
Messages : 74
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 74
Points : 44
Points : 44
merci beaucoup, ça fonctionne

Et la version "Create or alter" :

Code :
1
2
3
4
5
6
7
8
9
 
SET TERM  ^^ ;
CREATE OR ALTER TRIGGER ON_SUPP_X FOR T_X AFTER DELETE POSITION 0 AS 
BEGIN
UPDATE T_Y SET T_Y.CLE_X = 1 WHERE T_Y.CLE_X = OLD.CLE_X; 
UPDATE T_Z SET T_Z.CLE_X = 1 WHERE T_Z.CLE_X = OLD.CLE_X; 
END
 ^^
SET TERM ;  ^^
Remarques :
- il n'y a que sous IBConsole que les " SET TERM" sont nécessaires.
Sous l'explorateur SQL, il n'y en a pas besoin.
- Cette syntaxe de création des trigger passe aussi sous Firebrd 1.5, j'ai donc quelques modifs à faire, mais le code sera compatible entre FB 1.5 et 2.1. (bonne nouvelle )


Serait-ce abuser de vous demander la signification des "SET TERM" et des "^^" ? début et fin de transaction ?
En tout cas, merci mucho !
__________________
seb
Seb des Monts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 11h13   #6
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Seb des Monts Voir le message
Serait-ce abuser de vous demander la signification des "SET TERM" et des "^^" ? début et fin de transaction ?
En tout cas, merci mucho !
Set TERM est une commande qui fixe le caractère de terminaison de l'ordre SQL lequel est par défaut le point-virgule.
En le laissant par défaut, la création du trigger s'arrêterait sur
Code :
UPDATE T_Y SET T_Y.CLE_X = 1 WHERE T_Y.CLE_X = OLD.CLE_X;


Enfin, on peut mettre à peu près ce qu'on veut pour le SET TERM:
- ^^
- ùù
- !!
Dès lors qu'on n'emplafonne avec une commande SQL ou assimilée

En fin de script, on remet le défaut.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 11h35   #7
Membre du Club
 
Inscription : avril 2002
Messages : 74
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 74
Points : 44
Points : 44
D'accord, merci.
__________________
seb
Seb des Monts 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 16h16.


 
 
 
 
Partenaires

Hébergement Web