Я хотел бы написать оператор SQL, как показано ниже, для запроса данных, когда различные входные переменные в хранимой процедуре для MySQL / MariaDB:
DELIMITER ;;
CREATE PROCEDURE sp_WalletTransfer_GetWalletTransfers(IN IN_TypeCode smallint(6),IN IN_TransferStatusCode smallint(6), IN IN_PageIndex int, IN IN_PageCount int)
BEGIN
DECLARE offsetValue INT;
SET offsetValue = IN_PageCount*IN_PageIndex;
IF IN_TypeCode = -1 AND IN_TransferStatusCode = -1 THEN
SELECT
Id, RefNo, TypeCode, TransferStatusCode, DateCreated, DateUpdated, MemberCode, MemberId, Amount, Memo
FROM WalletTransfer
ORDER BY DateCreated DESC
LIMIT IN_PageCount OFFSET offsetValue;
ELSEIF IN_TypeCode >0 AND IN_TransferStatusCode = -1 THEN
SELECT
Id, RefNo, TypeCode, TransferStatusCode, DateCreated, DateUpdated, MemberCode, MemberId, Amount, Memo
FROM WalletTransfer
WHERE TypeCode = IN_TypeCode
ORDER BY DateCreated DESC
LIMIT IN_PageCount OFFSET offsetValue;
ELSEIF IN_TypeCode = -1 AND IN_TransferStatusCode > 0 THEN
SELECT
Id, RefNo, TypeCode, TransferStatusCode, DateCreated, DateUpdated, MemberCode, MemberId, Amount, Memo
FROM WalletTransfer
WHERE TransferStatusCode = IN_TransferStatusCode
ORDER BY DateCreated DESC
LIMIT IN_PageCount OFFSET offsetValue;
ELSE
SELECT
Id, RefNo, TypeCode, TransferStatusCode, DateCreated, DateUpdated, MemberCode, MemberId, Amount, Memo
FROM WalletTransfer
WHERE TypeCode = IN_TypeCode AND TransferStatusCode = IN_TransferStatusCode
ORDER BY DateCreated DESC
LIMIT IN_PageCount OFFSET offsetValue;
END IF;
END;;
DELIMITER ;
Как вы можете видеть, много дублирующихся операторов вскрипт.Я хотел бы знать, как лучше всего (из реальных практик) составить правильный оператор SQL, чтобы удалить дублирующуюся часть и сохранить скрипт в чистоте.
Как я могу это сделать?Любые намеки, пожалуйста!