Exécuter un SELECT dans un CASE WHEN
Bonjour à tous,
Voilà, je cherche à écrire une requête en simple sql, me permettant d'exécuter une requête sous condition.
J'ai pu le faire en pl/sql sans problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| declare
v_heure_min varchar2(50);
v_heure_max varchar2(50);
v_req varchar2(400);
begin
v_heure_min:='22:00';
v_heure_max:='02:00';
if v_heure_min<v_heure_max then
v_req:='create table voirie.acc_temp_ok as select * from voirie.accident where heure between ''' || v_heure_min|| ''' and ''' ||v_heure_max ||'''';
else
v_req:='create table voirie.acc_temp_nok as select * from voirie.accident where heure between ''' || v_heure_min|| ''' and ''23:59''
union all select * from voirie.accident where heure between ''00:00'' and '''|| v_heure_max ||'''' ;
end if;
execute immediate v_req;
end;
/ |
Mais j'aimerai maintenant pouvoir l'écrire un peu sous cette forme, mais cette syntaxe ne fonctionne pas :
Code:
1 2 3 4 5 6
| select
CASE
WHEN '22:00'<'23:00' THEN (select * from voirie.accident where heure between '22:00' and '23:00')
ELSE (select * from voirie.accident where heure between '22:00' and '23:59' union all select * from voirie.accident where heure between '00:00' and '02:00')
END
from dual; |
Je sais qu'il n'est pas correct d'écrire la requête en précisant les valeurs '22:00' et '23:00' (c'est un exemple), mais l'outil dans lequel elle va être insérée permettra de rentrer la valeur min (22:00) et la valeur max (23:00), saisi par l'utilisateur.
J'ai l'erreur suivante : ORA-00913: trop de valeurs
Je ne saisi pas le sens de cette erreur dans ce contexte.
Pourriez-vous m'orienter vers une solution, ou me donner quelques pistes?
Je vous remercie d'avance,