웹 프로젝트의 프런트 엔드에 적용된 필터에 따라 6 개의 변수가 포함될 수도 있고 그렇지 않을 수도있는 저장 프로 시저가 있습니다. 그러나 현재이 저장 프로 시저는 모든 필터가 null로 설정되어 있어도 아무 것도 반환하지 않습니다. 차이점이 있다면 MySQL Workbench를 사용하고 있습니다. 이전에는 적용된 필터에 따라 별도의 저장 프로 시저를 사용했지만 필터를 추가 할 때 관리하기가 너무 어려워졌습니다.MYSQL 변수가 null 인 경우 where 절을 무시합니다.
CREATE DEFINER=`root`@`localhost` PROCEDURE `spFiltersGet`(IN jAlertId int, IN timeFrom timestamp, IN timeTo timestamp, IN seconds int, IN alertStatus varchar(255), IN jHostName varchar(255))
BEGIN
DECLARE timeFromVal TIMESTAMP;
DECLARE timeToVal TIMESTAMP;
DECLARE fetchVal INT;
DECLARE offsetVal INT;
DECLARE alertIdVal INT;
DECLARE secondsVal INT;
DECLARE statusVal varchar(255);
DECLARE hostVal varchar(255);
SET timeFromVal = timeFrom;
SET timeToVal = timeTo;
SET fetchVal = 10;
SET offsetVal = 0;
SET alertIdVal = jAlertId;
SET secondsVal = seconds;
SET statusVal = alertStatus;
SET hostVal = jHostName;
SELECT * FROM job_alert
WHERE
(alertIdVal IS NULL OR alert_id = jAlertId)
AND (timeFromVal IS NULL && timeToVal IS NULL
OR start_time BETWEEN timeFromVal AND timeToVal)
AND (secondsVal IS NULL
OR time_diff >= seconds)
AND (statusVal IS NULL
OR status = alertStatus)
AND (hostVal IS NULL OR host_name = jHostName)
ORDER BY alert_id DESC
LIMIT OFFSETVAL , FETCHVAL;
END
하는 필터가 예를 적용하지 않으면 내가 JSON으로 변환 한 후 모든 I 출력의이 종류를 기대하고 null로 설정됩니다
{
error: "null",
jobStatus: "SUCCESS",
startTime: "Sep 9, 2016 10:42:54 AM",
endTime: "Sep 9, 2016 10:42:55 AM",
timeDiff: 1217,
runCount: 2,
jobInstanceId: 834,
host: "IT2561",
nextRun: "Sep 9, 2016 10:52:54 AM",
jobCount: 11,
name: "Gift Certificate Delivery",
id: 6,
description: "Gift Certificate Delivery"
}
내가 다른 StackOverflow의 답변을보고에서이를 작성했다 , 그래서 나는 내가 놓친 뭔가가 있다고 가정하고 있습니다. 내 콘솔에 오류가 발생하지 않고 기록을 반환하지 않습니다.
일부 샘플 데이터와 일부 값을 전달하고 결과 집합을 예상하십시오. – Shaharyar
사용자가 해당 필터를 선택하지 않으면 변수에 무엇을 전달합니까? – Shaharyar
@Shaharyar 기본값은 내가 sp에 모든 null을 전달할 때 심지어 그것은 단지 null 일 것이라고 말하는 것이 더 쉬울 것이므로 작동하지 않습니다. json을 포함시켜 봤지만 당신이 정말로 포함시키고 자하는 것을 확신하지 못했습니다. – justBecca