Bonjour, voici le problème que j'ai, je souhaite éxécuter suivant les valeurs entrées par l'utilisateur un requête ou l'autre. Actuellement je butte sur l'exécution de la requête 1. Voici le script testé sous 1 client 9.2 windows et 1serveur 9.2 solaris.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57
58
 
ACCEPT mode CHAR PROMPT 'Voulez-vous travailler sur toute l''année ou pour un mois précis (O,o/N,n) '
ACCEPT age CHAR PROMPT 'Saisisser l''age de la personne > : '
ACCEPT date_saisie DATE FORMAT 'DD/MM/YYYY' 
PROMPT 'Entrer la période de recherche au format JJ/MM/YYYY ou taper sur entré si recherche sur toute l''année : '
 
 
declare
date_travail date;
requete1 varchar(1024) ;
requete2 varchar(1024) ;
 
begin
requete1 := '
SELECT nat.idf_agent                                             MATRICULE ,
his.nom_usuel  || '' '' ||  his.Nom_prenom                  NOM_PRENOM,
to_char(date_travail,''YYYY'')-to_char(ide.dat_naissance,''YYYY'') AGE,
to_char(ide.dat_naissance,''DD/MM/YYYY'')                   DATE_NAISSANCE
FROM OG.IDENT ide,
     OG.IDENT_HIS his,
     RH.AGTNAT nat 
WHERE  ide.ident_id = his.ident_id
AND    nat.ident_id  = his.ident_id
AND   cod_gestion in (''0'',''2'') 
and idf_agent in (select distinct idf_agent from agtpai)
AND   nat.cod_coll =''toto''
AND to_number( to_char( date_travail,''YYYY'' ) ) - to_number(to_char(ide.dat_naissance,''YYYY''))= &age
AND to_date(to_char(his.dat_debut,''DD/MM/YYYY''),''DD/MM/YYYY'') <= date_travail
AND to_date(to_char(his.dat_fin,''DD/MM/YYYY''),''DD/MM/YYYY'') >    date_travail
ORDER BY MATRICULE ';
requete2 := '
SELECT nat.idf_agent                                             MATRICULE ,
       his.nom_usuel  || '' '' ||  his.Nom_prenom                  NOM_PRENOM,
       to_char(sysdate,''YYYY'')-to_char(ide.dat_naissance,''YYYY'') AGE,
       to_char(ide.dat_naissance,''DD/MM/YYYY'')                   DATE_NAISSANCE
FROM OG.IDENT ide,
     OG.IDENT_HIS his,
     RH.AGTNAT nat 
WHERE  ide.ident_id = his.ident_id
AND    nat.ident_id  = his.ident_id
AND   cod_gestion in (''0'',''2'') 
and idf_agent in (select distinct idf_agent from agtpai)
AND   nat.cod_coll =''toto''
AND to_number( to_char( date_travail,''YYYY'' ) ) - to_number(to_char(ide.dat_naissance,''YYYY''))= &age
AND to_number(to_char(date_travail,''MM'')) = to_number(to_char(ide.dat_naissance,''MM''))
AND to_date(to_char(his.dat_debut,''DD/MM/YYYY''),''DD/MM/YYYY'') <= date_travail
AND to_date(to_char(his.dat_fin,''DD/MM/YYYY''),''DD/MM/YYYY'') >    date_travail
ORDER BY MATRICULE ';
if ( '&mode' in ('O','o') ) then
date_travail := sysdate;
execute immediate requete1 ;
else 
date_travail := to_date ('&date_saisie','DD/MM/YYYY');
execute immediate requete2;
end if;
 
end; 
/

Quand je rentre 'O' et laisse la date vide alors celà me génère l'erreur suivante:

Error at line 11
ORA-00904: "DATE_TRAVAIL" : identificateur non valide
ORA-06512: à ligne 44
J'ai tout essayé et je ne vois ce qui ne vas pas
QUi pourrait éclairer ma lanterne