Necesito emular un IF en SQL, sin usar el CASE dado que la base es vieja
Publicado por Lucas (1 intervención) el 04/09/2013 18:08:44
Como el titulo lo dice, necesito emular un IF en SQL sin usar el CASE, ya que la base en la que esta el sistema es vieja. dicho query se utilizara en un record_group para llamar una LOV en un forms. El problema se presenta ya que según el parámetro que llegue, el query debe incluir o excluir campos en la LOV. yo pensé agregándole una I (para incluir) y una E (para excluir).
select distinct tipo, b.nro_1, b.nro_2, b.nro_3, b.razon_social, b.estado, b.nro_instr, b.ejerc_instr,
decode (ret_si_cta_benef(b.id),1,' SI',' --') cta_bco , b.id
from co_beneficiarios b, co_benef_clases bc, ngr_clases_benef nc
where b.id = bc.id_benef AND
bc.id_clase = nc.id AND
(
(
(substr(:parameter.p_parametro3,1,1) = 'I' AND NC.clase IN ( rtrim(substr(:parameter.p_parametro3,2,5)),rtrim(substr(:parameter.p_parametro3,7,5)),
rtrim(substr(:parameter.p_parametro3,12,5)),rtrim(substr(:parameter.p_parametro3,17,5)),rtrim(substr(:parameter.p_parametro3,22,5)),
rtrim(substr(:parameter.p_parametro3,27,5))))
OR
(substr(:parameter.p_parametro3,1,1) = 'I' AND (substr(:parameter.p_parametro3,2,5) = 'TODOS'))
)
OR
(substr(:parameter.p_parametro3,1,1) = 'E' AND NC.clase NOT IN ( rtrim(substr(:parameter.p_parametro3,2,5)),
rtrim(substr(:parameter.p_parametro3,7,5)), rtrim(substr(:parameter.p_parametro3,12,5)),
rtrim(substr(:parameter.p_parametro3,17,5)),rtrim(substr(:parameter.p_parametro3,22,5)),
rtrim(substr(:parameter.p_parametro3,27,5))))
)
AND
b.nro_1 like :b_control_benef.ti_cuit1 and
(substr('00000000',1,8-length(b.nro_2))||b.nro_2 like substr('00000000',1,8-length(:b_control_benef.ti_cuit2))||:b_control_benef.ti_cuit2) and
b.nro_3 like :b_control_benef.ti_cuit3 and b.estado is null order by nro_1, nro_2, nro_3
funciona, pero al arrojar mas de un parámetro al forms, se enloquece trayéndome todo, haciendo caso omiso del filtrado
select distinct tipo, b.nro_1, b.nro_2, b.nro_3, b.razon_social, b.estado, b.nro_instr, b.ejerc_instr,
decode (ret_si_cta_benef(b.id),1,' SI',' --') cta_bco , b.id
from co_beneficiarios b, co_benef_clases bc, ngr_clases_benef nc
where b.id = bc.id_benef AND
bc.id_clase = nc.id AND
(
(
(substr(:parameter.p_parametro3,1,1) = 'I' AND NC.clase IN ( rtrim(substr(:parameter.p_parametro3,2,5)),rtrim(substr(:parameter.p_parametro3,7,5)),
rtrim(substr(:parameter.p_parametro3,12,5)),rtrim(substr(:parameter.p_parametro3,17,5)),rtrim(substr(:parameter.p_parametro3,22,5)),
rtrim(substr(:parameter.p_parametro3,27,5))))
OR
(substr(:parameter.p_parametro3,1,1) = 'I' AND (substr(:parameter.p_parametro3,2,5) = 'TODOS'))
)
OR
(substr(:parameter.p_parametro3,1,1) = 'E' AND NC.clase NOT IN ( rtrim(substr(:parameter.p_parametro3,2,5)),
rtrim(substr(:parameter.p_parametro3,7,5)), rtrim(substr(:parameter.p_parametro3,12,5)),
rtrim(substr(:parameter.p_parametro3,17,5)),rtrim(substr(:parameter.p_parametro3,22,5)),
rtrim(substr(:parameter.p_parametro3,27,5))))
)
AND
b.nro_1 like :b_control_benef.ti_cuit1 and
(substr('00000000',1,8-length(b.nro_2))||b.nro_2 like substr('00000000',1,8-length(:b_control_benef.ti_cuit2))||:b_control_benef.ti_cuit2) and
b.nro_3 like :b_control_benef.ti_cuit3 and b.estado is null order by nro_1, nro_2, nro_3
funciona, pero al arrojar mas de un parámetro al forms, se enloquece trayéndome todo, haciendo caso omiso del filtrado
Valora esta pregunta


0