Создать динамический запрос в хранимой процедуре MySQL? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть несколько таблиц, которые внутренне объединены, и я пытаюсь динамически добавить или объединить предложение WHERE из параметров IN, которые могут содержать или не содержать значение.

PROCEDURE `tablaReporte`(IN IdSeguro int, IN IdTomador int, IN IdAgente int, IN fechaInicio date)
BEGIN
SELECT p.Id_seguro, CONCAT(c.Nombre, ' ', c.Apellido) AS Nombre, CONCAT(a.Nombre, ' ', a.Apellido) AS NombreAgente,
p.fechaInicio, p.fechaFin, p.fechaContratacion, s.TipoSeguro, e.Descripcion
FROM POLIZA P 
INNER JOIN TOMADOR C ON P.Id_tomador = C.IdTomador
INNER JOIN AGENTE A ON P.Id_agente = A.idAgente
INNER JOIN SEGURO S ON P.Id_seguro = S.idSeguro
INNER JOIN ESTADO E ON S.idEstado = E.idEstado
WHERE P.Id_seguro = IdSeguro AND

Это та часть, где ядолжны проверить, если следующие параметры имеют значение или нет.Что-то вроде

IF IdTomador IS NOT NULL
THEN
 CONCAT(' P.Id_tomador = ', IdTomador); //Concat to the initial query
END IF;

И то же самое со следующим параметром ..

1 Ответ

0 голосов
/ 07 декабря 2018

Вместо динамического SQL используйте статический SQL-оператор, который адаптируется к тому факту, что параметр может быть нулевым.

Так что это всегда будет в предложении WHERE: P.Id_tomador = coalesce(IdTomador, p.id)

Полный запрос будет:

SELECT p.Id_seguro, CONCAT(c.Nombre, ' ', c.Apellido) AS Nombre, CONCAT(a.Nombre, ' ', a.Apellido) AS NombreAgente,
p.fechaInicio, p.fechaFin, p.fechaContratacion, s.TipoSeguro, e.Descripcion
FROM POLIZA P 
INNER JOIN TOMADOR C ON P.Id_tomador = C.IdTomador
INNER JOIN AGENTE A ON P.Id_agente = A.idAgente
INNER JOIN SEGURO S ON P.Id_seguro = S.idSeguro
INNER JOIN ESTADO E ON S.idEstado = E.idEstado
WHERE P.Id_seguro = IdSeguro AND
P.Id_tomador = coalesce(IdTomador, p.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...