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é
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 !!
alors je vais tout reprendre
je reprend tout sinon tu va me prendre pour un urluberlu :D
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 !!
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 :NEW:DATEPLAN_0 qui même si il y a plusieurs lignes updaté ou inséré reste le même pour toutes les lignes !
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 |