Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 22/05/2008, 02h57   #1
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Par défaut Création de triggers

Bonjour a tous,

Je débute dans le monde des triggers, j'ai besoin d'automatiser une action sur une base de données toute bête...

je veut qu'après que table media est recu un update (update à 1) sur l'attribut 'disponibilidad' le triggers mette a jour dans cette même table l'attribut id_usuario a 0...

Voici le code que j'ai réalisé mais j'obtient des erreurs:

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE TRIGGER  Free_usuario
AFTER UPDATE ON MEDIA
FOR each row
WHEN (new.DISPONIBILIDAD =1)
BEGIN
UPDATE media
SET id_usuario=0
WHERE new.disponibilidad=1
END;
Citation:
ERREUR: ERROR at line 5: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following
une idée svp ???

Merci d'avance...
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 08h15   #2
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Salut,
c'est un simple problème de syntaxe...
il te manque 2 choses :
1. des ":" (deux points) pour qualifier tes variables "new"
2. des ";" (point virgule) pour signifier la fin de chaque instruction
Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE TRIGGER Free_usuario
AFTER update on MEDIA
for each row
WHEN (:new.DISPONIBILIDAD =1)
BEGIN
UPDATE media
SET id_usuario=0
WHERE :new.disponibilidad=1 ;
END;
maintenant 2 généralités sur ce forum :

1. pense à utiliser les balises CODE, ça rend le code bien plus lisible.
2. ce coup-ci OK, mais à l'avenir ce forum est là pour aider aux problèmes de fond... ce n'est pas un débogueur interactif... alors les problèmes de syntaxe de base tu les résouds toi-même, merci !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 11h45   #3
Rédacteur
 
Inscription : décembre 2002
Messages : 2 401
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 401
Points : 3 307
Points : 3 307
Citation:
Envoyé par Yorglaa Voir le message
c'est un simple problème de syntaxe...
il te manque 2 choses :
1. des ":" (deux points) pour qualifier tes variables "new"
Effectivement, c'est "un simple problème de syntaxe".
Du coup, votre code ne marchera pas non plus, parce que dans la clause WHEN, il ne faut pas préfixer NEW ou OLD par ":". (C'est exigé uniquement dans le corps du déclencheur)
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 11h58   #4
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
oups, désolé, j'ai répondu vite !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 12h46   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 458
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 458
Points : 4 225
Points : 4 225
Et puis ça marchera jamais
Code :
1
2
3
4
ON UPDATE ON MEDIA
BEGIN
UPDATE media ..
END;
Tu ne peux ni lire, ni updater, ni insérer dans la table du trigger.
Quelqu'un peut donner l'erreur oracle ? (J'ai dormi que 4h, j'ai le cerveau en mode ralenti)

Edit : C'est bon l'erreur est : Table Mutante (ou Mutating table)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 13h40   #6
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Rôôôôôôô...
lui gâcher ainsi le plaisir de la découverte et de l'auto-formation...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 10h41   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 458
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 458
Points : 4 225
Points : 4 225
Désolé..
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 11h16   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Il faudrait donc
Code :
1
2
3
4
5
6
7
8
CREATE OR REPLACE TRIGGER Free_usuario
BEFORE UPDATE ON MEDIA
WHEN (:new.disponibilidad=1)
FOR each row
WHEN (:new.DISPONIBILIDAD =1)
BEGIN
:id_usuario=0;
END;
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 19h33   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 458
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 458
Points : 4 225
Points : 4 225
Quelques erreurs de code :

Il n'y a pas de : devant le new dans le when
Et quelques erreurs de frappe

Code :
1
2
3
4
5
6
7
CREATE OR REPLACE TRIGGER Free_usuario
BEFORE UPDATE ON MEDIA
FOR each row
WHEN (new.disponibilidad=1)
BEGIN
 :new.id_usuario := 0;
END;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h13.


 
 
 
 
Partenaires

Hébergement Web