Хранимая процедура MySQL Как сократить выражение - PullRequest
0 голосов
/ 24 июня 2019

Просто хочу попросить вашей помощи относительно создания процедуры хранилища в базе данных MySQL. Это мой первый раз при создании процедуры магазина. Скорее всего, я использовал для создания представлений, но на этот раз мне нужно реализовать процедуру хранения в базе данных MySQL. Я здесь создал простой, но я думаю, что это излишне в заявлении. Есть ли кто-нибудь, кто может помочь мне сократить заявление? С этим, это может помочь мне изучить больше относительно хранимой процедуры. Пожалуйста, смотрите код для справки. Очень ценится с вашей помощью.

DELIMITER $$

USE `doris_master_data`$$

DROP PROCEDURE IF EXISTS `webserver_service_order`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `webserver_service_order`(
IN xselection BIGINT(8),
IN xreceived_from_date BIGINT(8),
IN xreceived_to_date BIGINT(8))
BEGIN

IF xselection=0 THEN

SELECT DISTINCT
so.service_code,
sl.service_name,
xx.Total_Services
FROM 
service_order so
INNER JOIN services_lists sl ON so.service_code=sl.service_code
LEFT OUTER JOIN 
(
    SELECT
    a.service_code,
    COUNT(DISTINCT CONCAT(a.service_code,'-',a.service_order_code)) AS Total_Services
    FROM
    service_order a
    WHERE
    (a.service_order_date_received BETWEEN xreceived_from_date AND xreceived_to_date)
    AND a.service_code_is_active=1
    AND a.requirement_code_is_active=1
    GROUP BY a.service_code
) AS xx ON so.service_code=xx.service_code
WHERE
(so.service_order_date_received BETWEEN xreceived_from_date AND xreceived_to_date)
AND so.service_code_is_active=1
AND so.requirement_code_is_active=1;

ELSE
SELECT DISTINCT
so.service_code,
sl.service_name,
xx.Total_Services
FROM 
service_order so
INNER JOIN services_lists sl ON so.service_code=sl.service_code
LEFT OUTER JOIN 
(
    SELECT
    a.service_code,
    COUNT(DISTINCT CONCAT(a.service_code,'-',a.service_order_code)) AS Total_Services
    FROM
    service_order a
    WHERE
    (a.service_order_date_received BETWEEN xreceived_from_date AND xreceived_to_date)
    AND a.service_code_is_active=1
    AND a.requirement_code_is_active=1
    GROUP BY a.service_code
) AS xx ON so.service_code=xx.service_code
WHERE
so.service_code=xselection AND
(so.service_order_date_received BETWEEN xreceived_from_date AND xreceived_to_date)
AND so.service_code_is_active=1
AND so.requirement_code_is_active=1;

END IF;


END$$

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...