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 15/02/2008, 16h03   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut ma procedure ne s'execute pas

bonjour a tous !
voila mon probleme du jour :

j'ai une procédure :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
(typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
 
IS 
 
var_plan VARCHAR2(50);
var_date VARCHAR2(15);
var_timestamp VARCHAR2(50);
 
BEGIN
 
var_plan:= 'PLANIF';
var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
var_date:= :new.DATEPLAN_0;
 
EXECUTE IMMEDIATE
'
insert into NEGOCEX32.XSESSION XSS
(XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
values
('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
 
';
 
END;
/
un trigger :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
AFTER 
INSERT OR UPDATE ON NEGOCEX32.XPLANBPE 
FOR each row  
 
 
DECLARE
 
var_type VARCHAR2(50);
var_date VARCHAR2(15);
 
begin 
 
var_type:= 'PLANIF';
var_date:= :new.DATEPLAN_0;
 
VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
 
end;
ils sont tous les deux testés il n'y a pas de pb de compilation.

mais j'ai un truck bizzare quand je fait declencher mon trigger qui doit executer ma procédure VERIF_DOUBLON_PLANIF_IU il ne ce passe rien

alors j'ai testé en ligne de commande :

Code :
1
2
 
SQL>execute VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08');
et la ça marche nikel je comprend pas pourkoi !? merci de votre aide

PS/ ne cherchez pas l'utilité de la procédure car j'ai pas terminé
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h06   #2
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
le EXECUTE IMMEDIATE est inutile déjà

Essaye :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
(typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
 
IS 
 
var_plan VARCHAR2(50);
var_date VARCHAR2(15);
var_timestamp VARCHAR2(50);
 
BEGIN
 
var_plan:= 'PLANIF';
var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
var_date:= :new.DATEPLAN_0;
 
INSERT INTO NEGOCEX32.XSESSION XSS
(XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
VALUES
(' ',var_plan,var_date || ','|| var_timestamp );
 
END;
/
Sinon, t'as fait comment pour déclencher le trigger ? T'as essayé d'ajouter un DBMS_OUTPUT pour vérifier que tu passes bien dedans ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h20   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
pour declencher le trigger j'ai une requete update mais c'est vrai que j'ai pas essayé le DBMS_OUTPUT que je test de suite a toute !!
et pour le execute immediate ben j'ai réussi à le faire marcher que comme ça, mais je test ta modif merci beaucoup
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h39   #4
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
bon resultat des course j'arrive pas a faire marcher sans le execute immediate il me met des erreurs de compilation et j'ai ecrit la ligne

Code :
1
2
 
dbms_output.put_line('ok');
et rien ne s'affiche sur aucun des deux dailleur peut etre je l'ecrit mal !?
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h52   #5
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
Citation:
Envoyé par highs Voir le message
il me met des erreurs de compilation
Il faut les deviner ?

Citation:
Envoyé par highs Voir le message
et rien ne s'affiche sur aucun des deux dailleur
Donc, le trigger ne se déclenche pas

Citation:
Envoyé par highs Voir le message
peut etre je l'ecrit mal !?
si tu parles de ton orthographe, en effet
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h53   #6
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
est-ce que le trigger est bien créé d'ailleurs... parce qu'il manque un / à la fin du code que tu as mis
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h07   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut alors les réponses dans l'ordre

les erreurs sont :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SQL> execute VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08');
BEGIN VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08'); END;
 
      *
ERREUR à la ligne 1 :
ORA-06550: Ligne 1, colonne 7 :
PLS-00905: l'objet NEGOCEX32.VERIF_DOUBLON_PLANIF_IU n'est pas valide
ORA-06550: Ligne 1, colonne 7 :
PL/SQL: Statement ignored
 
 
SQL> SHOW err
Pas d'erreur.
je ne sais toujours pas si le trigger se déclenche car j'ai testé dans ma procédure de rajouter également :

Code :
1
2
 
dbms_output.put_line('ok');
et même si elle s'execute bien je n'est pas en sortie le 'ok'

et note comme je m'applique pour écrire

mais en se qui concerne le trigger si je met le corps de ma procédure dans mon trigger il execute bien ma requete !

donc, pour ma part j'en deduis que c'est la ligne :

Code :
1
2
 
VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
qui ne marche pas !!
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h12   #8
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Il faut faire plutôt :

Code :
SELECT * FROM user_errors
à la place de show errors
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h16   #9
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
si le trigger n'est pas valide il ne risque pas de se déclencher et si la procédure sort en erreur elle ne risque pas de faire quoique ce soit ²

que donne :
Code :
SHOW err TRIGGER NEGOCEX32.VERIF_DOUBLON_PLANIF_IU
Citation:
et note comme je m'applique pour écrire
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h39   #10
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut alors je vais tout reprendre

je reprend tout sinon tu va me prendre pour un urluberlu

au tout debut j'ai créé un trigger :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
AFTER 
INSERT OR UPDATE ON NEGOCEX32.XPLANBPE 
FOR each row  
 
DECLARE
 
var_plan VARCHAR2(50);
var_date VARCHAR2(15);
var_timestamp VARCHAR2(50);
 
begin
 
var_plan:= 'PLANIF';
var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
var_date:= :new.DATEPLAN_0;
 
EXECUTE IMMEDIATE 
'
insert into NEGOCEX32.XSESSION XSS 
(XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0) 
values 
('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
 
';
 
end;
/
malgrés se fameux execute immediate il marché bien :

en écrivant cette requete :

Code :
1
2
 
UPDATE XPLANBPE SET STATUT_0 = ' ', QTY_0 = '6', XTPS_VID_0 = 9, HEUREPLAN_0 = '1100', SITEFAB_0 = 'C01', XCAMION_0 = '217', XOBS_0 = ' ', TMPS_FAB_0 = 10, TMPS_ALLER_0 = 25, TMPS_RETR_0 = 25, XCHAUFF_0 = '637', CONFIRM_0 = ' ', TIMESTAMP_0 = '1202985933' WHERE NUMORI_0 = 'NOR-SXF0800593' AND REGROUP_0 = '192.168.10.179_3_1202823970';
il m'inserer bien dans ma table XSESSION les données voulu !
jusque là tous marché bien :

le problème été que sur cet UPDATE il y avait trois lignes mis à jour, donc le trigger ce déclenché trois fois et donc insérait trois lignes dans ma table XSESSION ce qui me pose problème pour la suite de mon application.

je me suis donc dit je vais créé une procédure qui va reprendre le code de mon trigger avec certaines conditions pour éviter d'avoir plusieurs lignes inséré dans XSESSION.

j'écrit donc cette procédure : ( elle n'est pas terminé je précise )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
(typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
 
IS 
 
var_plan VARCHAR2(50);
var_date VARCHAR2(15);
var_timestamp VARCHAR2(50);
 
BEGIN
 
var_plan:= 'PLANIF';
var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
var_date:= datePlan;
 
EXECUTE IMMEDIATE
'
insert into NEGOCEX32.XSESSION XSS
(XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
values
('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
 
';
 
END;
/
et réécrit mon trigger de cette façon :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
AFTER 
INSERT OR UPDATE ON NEGOCEX32.XPLANBPE 
FOR each row  
 
DECLARE
 
var_type VARCHAR2(50);
var_date VARCHAR2(15);
 
begin 
 
var_type:= 'PLANIF';
var_date:= :new.DATEPLAN_0;
 
VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
 
end;
 
 
/
et voilà ou est le problème il n'execute plus ma procédure !!
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h44   #11
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
Citation:
Envoyé par highs Voir le message
je reprend tout sinon tu va me prendre pour un urluberlu
trop tard

je plaisante bien sûr

Citation:
Envoyé par highs Voir le message
je me suis donc dit je vais créé une procédure qui va reprendre le code de mon trigger avec certaines conditions pour éviter d'avoir plusieurs lignes inséré dans XSESSION.
C'est pas plus simple de supprimer FOR EACH ROW ?

J'aimerai quand même avoir les erreurs de compil
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h56   #12
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut si si j'avais de suite pensé à ça !

mais pb je ne peux plus utiliser mon " :NEW " et j'en ai absolument besoin.
en supprimant le ' for each row ' j'aurai bien déclenclé une seule fois mon trigger sur la transaction, mais j'ai besoin de récupérer mon :NEWATEPLAN_0 qui même si il y a plusieurs lignes updaté ou inséré reste le même pour toutes les lignes !
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 18h01   #13
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut je t'envoie les erreurs de compile

Code :
1
2
3
4
5
6
7
8
9
10
 
 
SQL> SHOW err PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU;
Erreurs pour PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
20/1     PL/SQL: SQL Statement ignored
23/1     PLS-00395: nombre de valeurs erroné dans clause VALUES de
         l'instruction INSERT
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 18h32   #14
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 213
Points : 4 213
A priori c'est l'instruction de l'execute immediate qui n'est pas compilée à cause des retours chariots.
Je te conseille ceci :
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 NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
(typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
 
IS 
 
	var_plan VARCHAR2(50);
	var_date VARCHAR2(15);
	var_timestamp VARCHAR2(50);
	var_insert VARCHAR2(2000);
 
BEGIN
 
	var_plan:= 'PLANIF';
	var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
	var_date:= datePlan;
    var_insert := 'INSERT INTO NEGOCEX32.XSESSION (SNUM_SES_0, STYPE_0, SDATE_0, STIMESTAMP_0)'
	 ||' VALUES ('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')';
 
 
 	EXECUTE IMMEDIATE var_insert;
 
END;
/
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2008, 20h06   #15
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Ca va aller bien plus vite si à la place des Sql dynamique innutiles t'utilise les SQL statique.
mnitu 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 19h29.


 
 
 
 
Partenaires

Hébergement Web