Итак ... У меня была хранимая процедура, которая должна возвращать данные гравитационной формы из базы данных mySQL. Он работал, но у меня были некоторые проблемы с нулевыми значениями. После исправления этих ошибок теперь, когда я пытаюсь запустить хранимую процедуру, мне сообщают, что у меня есть «усеченное неверное значение даты и времени» для моего входного параметра, который является идентификатором входа пользователя и определен как varchar (8). Первоначально он работал и работает при стандартном вызове запроса (переменные переименовываются в «@»). Любые идеи?
Вот хранимая процедура
CREATE DEFINER=`root`@`localhost` PROCEDURE `wp_GetWeeklyReport`(
IN aID varchar(8),
OUT formnumb int,
OUT rptDate date
)
BEGIN
DECLARE ltstAgtEnt int;
# Finds the last entry number for the user login passed by parameter, returns 0 if none found
SELECT (CASE WHEN EXISTS(SELECT max(entry_id)
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 38 AND meta_value = aID
GROUP BY form_id, meta_key, meta_value) THEN (SELECT max(entry_id)
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 38 AND meta_value = aID
GROUP BY form_id, meta_key, meta_value)
ELSE 0
END)
INTO ltstAgtEnt;
# returns the latest entry date for any submitted form of this type
SELECT max(pkwp_gf_entry_meta.meta_value) INTO rptDate
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 3
GROUP BY form_id, meta_key;
# returns the entry number for this user if their last entry matches the latest date
SELECT (CASE WHEN EXISTS(SELECT entry_id
FROM pkwp_gf_entry_meta
WHERE entry_id = ltstAgtEnt AND meta_value = rptDate) THEN (SELECT entry_id
FROM pkwp_gf_entry_meta
WHERE entry_id = ltstAgtEnt AND meta_value = rptDate)
ELSE 0
END)
INTO formnumb;
END
Вот вызов выполнения:
set @formnumb = 0;
set @rptDate = '0';
call wordpressdb.wp_GetWeeklyReport('SMITBILL', @formnumb, @rptDate);
select @formnumb, @rptDate;
И результат:
10:36:30 call wordpressdb.wp_GetWeeklyReport('SMITBILL', @formnumb, @rptDate) Error Code: 1292. Truncated incorrect datetime value: 'YANGCHIA' 0.141 sec
Однако , если я строю запрос вместо хранимой процедуры -
SET @aID = 'SMITBILL';
SELECT (CASE WHEN EXISTS(SELECT max(entry_id)
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 38 AND meta_value = @aID
GROUP BY form_id, meta_key, meta_value) THEN (SELECT max(entry_id)
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 38 AND meta_value = @aID
GROUP BY form_id, meta_key, meta_value)
ELSE 0
END)
INTO @ltstAgtEnt;
SELECT max(pkwp_gf_entry_meta.meta_value) INTO @rptdate
FROM pkwp_gf_entry_meta
WHERE form_id = 19 AND meta_key = 3
GROUP BY form_id, meta_key;
SELECT (CASE WHEN EXISTS(SELECT entry_id
FROM pkwp_gf_entry_meta
WHERE entry_id = @ltstAgtEnt AND meta_value = @rptdate) THEN (SELECT entry_id
FROM pkwp_gf_entry_meta
WHERE entry_id = @ltstAgtEnt AND meta_value = @rptdate)
ELSE 0
END)
INTO @formnumb;
SELECT @formnumb, @rptdate;
Мы получаем -
formnumb rptdate
3126 2020-04-03