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 24/01/2011, 19h06   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 2
Points : 2
Par défaut Vérification du résultat d'un SELECT

Bonsoir,

J'ai écrit un déclencheur dans le but de vérifier si un vétérinaire est encore en charge d'un animal avant que le vétérinaire ne soit supprimé.

N'ayant pas le moyen d'exécuter le code et n'étant vraiment pas certain que ma manière de faire soit correcte pour le test, je vous demande votre avis :


Code :
1
2
3
4
5
6
7
8
9
10
 
-- Début du code
CREATE OR REPLACE TRIGGER Integrite_personnel BEFORE DELETE ON Personnel
DECLARE
	requete VARCHAR(1000); -- 1000 Pour s'assurer qu'il n'y ait pas d'overflow
	pb_veterinaire EXCEPTION;
BEGIN
	requete = (SELECT animal_id FROM Animal WHERE son_veterinaire_id = :old.personnel_id) ;
	IF NOT requete THEN RAISE pb_veterinaire; --si la requête n'a obtenu aucun résultat
        ELSE animal_id = TO_NUMBER(requete) ; --si oui, on prend l'id de l'unique animal trouvé (animal_id étant une PRIMARY KEY)
J'accepte volontiers toutes les critiques !


Flavien
Flastick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 19h14   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Votre interprétation du PL/SQL est originale.
Commencez par regarder une documentation : http://sheikyerbouti.developpez.com/pl_sql/
Pour les déclencheurs, c'est ici : http://sheikyerbouti.developpez.com/...?page=Chap6#L6
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 23h35   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 2
Points : 2
Originale ? hem..Je prendrai ça pour un compliment!

Oui je connais ce tutoriel, je l'ai déjà parcouru longuement mais il est si vaste que je m'y suis un peu perdu.
Pourriez-vous me donner une syntaxe-type à utiliser pour effectuer une telle vérification? Ou alors des indices ?

Merci pour votre aide !

Flavien
Flastick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 23h46   #4
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
Votre interprétation du PL/SQL est originale.
comme cité ci-dessus tu ne fermes pas ta boucle if, ton trigger...

Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
Pour les déclencheurs, c'est ici : http://sheikyerbouti.developpez.com/...?page=Chap6#L6
tu as un bel exemple de trigger before delete dans ce lien
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 10h22   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 2
Points : 2
Oui on est d'accord ; C'est le début du code seulement, après il vient un
END IF;
EXCEPTION
...
END;

Mais j'ai simplifié car ce que je voulais montrer c'était ma manière de faire un test sur une requète en utilisant une variable 'requete'.

Est-ce que c'est la bonne manière de réaliser le test ?

Je remets seulement les lignes cruciales :

Code :
1
2
3
4
5
 
requete VARCHAR(1000);
...
requete = (SELECT animal_id FROM Animal WHERE son_veterinaire_id = :old.personnel_id) ;
IF NOT requete THEN ... --si la requète ne donne aucun résultat

En vous remerciant pour votre patience,

Flavien
Flastick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h00   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
?? C'est du php que tu codes ?
Un trigger, c'est comme une procédure, d'ailleurs, tu peux créer la procédure et envoyer en paramètre ton :old. depuis le trigger.
Faut vérifier les erreurs de compil.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 18h44   #7
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
v_animal_id animal.animal_id%TYPE;
BEGIN
....
BEGIN 
SELECT animal_id
INTO v_animal_id
FROM Animal
WHERE son_veterinaire_id = :old.personnel_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RAISE pb_veterinaire;
WHEN TOO_MANY_ROWS
THEN
RAISE pb_veterinaire;
END;
...
END;
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 20h43   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 2
Points : 2
Ahh on fait comme ça !
Parfait ! J'ai tout compris. Merci beaucoup !!

Flavien
Flastick 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 04h19.


 
 
 
 
Partenaires

Hébergement Web