Q: Код ошибки: 1292 Сокращенное неверное значение даты и времени для параметра varchar, только в процедуре - PullRequest
0 голосов
/ 06 апреля 2020

Итак ... У меня была хранимая процедура, которая должна возвращать данные гравитационной формы из базы данных 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

1 Ответ

0 голосов
/ 06 апреля 2020

Изменение выходной переменной на varchar (10) позволяет запускать хранимую процедуру, но если кто-то сначала поймет, почему она работает, и почему она работает как запрос, но не как хранимая процедура, права «Лучший ответ» за хватку.

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