Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 15/01/2011, 16h49   #1
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
Par défaut PB TRIGGER ne fonctionne pas

Bonsoir,
je suis un novice et je m'entraine a faire des tests et notamment sur les triggers.
JE comprends pas j'ai créé un trigger sur un update,insert , delete et il ne' agit pas ?
Pourriez vous m'aider à trouver l'origine de l'erreur.
Voici mon trigger:
Code :
1
2
3
4
5
CREATE OR REPLACE TRIGGER EMP_MODIF 
BEFORE INSERT OR DELETE OR UPDATE ON EMPLOYEES 
BEGIN
DBMS_OUTPUT.PUT_LINE('modification prise en compte');
END;
je rentre ce code sql et rien ne sa passe hormis la mise à jour:
Code :
UPDATE  EMPLOYEES SET EMPLOYEES.FIRST_NAME='jymmy' WHERE EMPLOYEES.EMPLOYEE_ID=100;

meric de votre aide
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 19h12   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
DBMS_OUTPUT.PUT_LINE, dans quel environnement testes tu ton code ?
Si c'est sqlplus il faut faire avant :
Si c'est SqlDevelopper il faut cliquer sur :
view > dbms_output
ensuite cliquer sur la croix verte ("enable dbms_ouput for connection") puis recommencer ton test.
Si c'est toad, je ne l'ai pas sous la main mais si je me souviens bien il y a un onglet dbms_output "dans la zone du bas"

Je n'ai pas testé avec ton trigger si tu n'as toujours pas d'affichage j'essaierais avec ton code.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 19h28   #3
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
salut
il s'agit de sqldevelopper mais je vois pas ou tu veux que je clique :
"view > dbms_output"
Merci
Autre point j'essaie de m'entrainer sur la manipulation des curseurs.
est ce une bonne chose de les utiliser via des procédures ?
Merci
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 19h33   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par pepitoluna Voir le message
il s'agit de sqldevelopper mais je vois pas ou tu veux que je clique :
"view > dbms_output"
Ben dans le menu en haut (entre navigate et versioning) il y a view et dans les possiilités offertes par view il y a dbms_output....

Pour les curseurs ça dépend comment tu les utilises... si c'est faire des boucles pour insérer ou updater des lignes efectivement c'est très souvent inutil, si c'est pour renvoyer un paramètre OUT d'une procédure en SYS_REFCURSOR alors ça a du sens.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 21h20   #5
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
merci
je dois être un peu fatigué je ne trouve vraiment pas cette option dans le menu
qui est en francais et est composé ( fichier, modifier ,affichage, naviguer , executer, gestion des vresions, outils, aide)


par contre j'aurais une question sur une procédure comportant un curseur que je suis en train d'écrire et qui me rejette l'expression fetch je ne comprends pas pourquoi si quelqu un aurait une piste :
voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
CREATE OR REPLACE
PROCEDURE TEST AS 
BEGIN 
   DECLARE 
 
  CURSOR CR_employées( id_dept number ) IS (SELECT employees.employee_id, EMPLOYEES.FIRST_NAME,departments.department_id,departments.manager_id FROM  employees,departments WHERE departments.department_id = EMPLOYEES.DEPARTMENT_ID  AND departments.department_id=id_dept);
 
employ CR_employées%ROWTYPE;
 
 
OPEN CR_employées;
 
LOOP
fetch CR_employées INTO employ;
EXIT WHEN CR_employées%NOTFOUND;
dbms_output.put_line(employ.FIRST_NAME);
 
END LOOP ;
end;
 
END TEST;
merci encore pour l'aide apportée
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 21h26   #6
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
ps: je me suis trompé
voici le code qui ne fonctionne pas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
CREATE OR REPLACE
PROCEDURE TEST AS 
BEGIN 
   DECLARE 
 
  CURSOR CR_employées( id_dept number ) IS (SELECT employees.employee_id, EMPLOYEES.FIRST_NAME,departments.department_id,departments.manager_id 
   FROM  employees,departments WHERE departments.department_id = EMPLOYEES.DEPARTMENT_ID  AND departments.department_id=id_dept);
 
employ CR_employées%ROWTYPE;
 
 
OPEN CR_employées (1);
 
LOOP
fetch CR_employées INTO employ;
EXIT WHEN CR_employées%NOTFOUND;
dbms_output.put_line(employ.employee_id);
 
END LOOP ;
end;
 
END TEST;
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 13h07   #7
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
personne n'a d'idées sur l'origine de l'erreur ?
Code :
fetch CR_employées INTO employ;
je ne comprends pas pourquoi il ne veut pas que je mette les valeurs de mon curseur dans employ qui est une CR_employées%rowtype

voici l'erreur affichée :
Citation:
Erreur(15,1): PLS-00103: Symbole "FETCH" rencontré à la place d'un des symboles suivants : constant exception <identificateur> <identificateur entre guillemets> table LONG_ double ref char time timestamp interval date binary national character nchar
merci de votre aide
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 14h36   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
DECLARE c'est pour les blocks anoymes, lorsque tu créé une procedure is/as correspond au declare.
Il faut placer begin après les déclarations :
Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE
PROCEDURE TEST AS 
 
  CURSOR CR_employées( id_dept number ) IS (SELECT employees.employee_id, EMPLOYEES.FIRST_NAME,departments.department_id,departments.manager_id 
   FROM  employees,departments WHERE departments.department_id = EMPLOYEES.DEPARTMENT_ID  AND departments.department_id=id_dept);
 
  employ CR_employées%ROWTYPE;
 
BEGIN
 
OPEN CR_employées (1);
Je te conseille de lire le guide PL/SQL du site.

Concernant view je me suis trompé d'emplacement mais c'est évidemment affichage.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 15h30   #9
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
merci encore,
ouai j'ai commencé et continue de lire le pl/SQL guide ,et j'avais donc corrigé cette erreur (sur les declarations) mais l'erreur persiste.
Merci
pepitoluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 16h07   #10
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je ne sais pas si ça viens de là mais ce n'est pas une bonne idée de mettre des accents dans les noms de variables, quelque soit le langage utilisé.

De toute façon utilise for à la place de open (util pour du sql dynamique) l'écriture est beaucoup plus simple et lisible.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 17h35   #11
Nouveau Membre du Club
 
Inscription : août 2009
Messages : 103
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 103
Points : 25
Points : 25
merci
ca marche avec la boucle for
pepitoluna 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 01h04.


 
 
 
 
Partenaires

Hébergement Web