EXECUTE IMMEDIATE dans une procédure
Bonjour A tous ,
je ne suis pas un expert sql je trouve des soucis a exécuter une procédure compilé sans erreurs
mais lors de l’exécution un message bizarre apparaît
Citation:
ORA-01847: le jour du mois doit être compris entre 1 et le dernier jour du mois
sachant que je n'utilise aucune date dans ma requête le soucie dans l'execution de EXECUTE IMMIDIATE
voila le code de ma 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| create or replace PROCEDURE donnee_obl2 is
BEGIN
DECLARE
CURSOR c IS select cli, tcli FROM bkcli;
BEGIN --2
--Traitement bkcli
FOR eng IN c LOOP --1
DECLARE
xvaleur NUMBER;
x_requete VARCHAR2(2000);
wexist_cli NUMBER;
wresultat NUMBER;
wtcli varchar2(3);
wzone varchar2(100);
wcli varchar2(20);
CURSOR cvaldef_cli IS SELECT zone zone1, iden FROM valdef_bkcli WHERE TRIM(tcli) = TRIM(eng.tcli) AND obl = 'O' AND action = 'T' ORDER BY zone;
BEGIN --3
FOR eng1 IN cvaldef_cli LOOP --2
wzone:=eng1.zone1;
wcli:=eng.cli ;
x_requete:='select count(*) from bkcli where cli = '''|| wcli ||''' and (' || trim(wzone)|| ' is null or ' || trim(wzone) || ' = '' '')';
EXECUTE IMMEDIATE x_requete into wresultat ;
commit;
INSERT INTO requete VALUES ( wresultat );
COMMIT;
IF wresultat = 1 THEN
SELECT COUNT(*) INTO wexist_cli FROM reporting_valdef WHERE cli = ENG.cli;
IF wexist_cli = 0 THEN
INSERT INTO reporting_valdef VALUES (ENG.cli,ENG1.zone1,1 );
COMMIT;
ELSE
UPDATE reporting_valdef SET non_saisie = non_saisie||';'||eng1.zone1,nbre_non = nbre_non + 1;
COMMIT;END IF;
END IF;
END LOOP; --2
END;--3
end loop;
---update *valdef_bkcli set valeur = null ; commit ; END LOOP;--1
END;--2
---------------
end ; |
l'erreur apparait sur la ligne execute immidiate
merci pour votre aide ,
cdt,
mrabet
champ date qui pose probléme
merci en effet c'etait un champ date qui pose le problème
merci pour vous