Не удалось изменить '' на ноль для datetime в хранимой процедуре MySQL
Я написал хранимую процедуру:
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_create_new_task`(
IN _taskName VARCHAR(30),
IN _description VARCHAR(500),
IN _startDate DATETIME,
IN _endDate DATETIME,
IN _lacation VARCHAR(30),
IN _subTo INT
)
BEGIN
INSERT INTO tm_tasks (taskName, description, startDate, endDate, lacation, subTo)
VALUES (_taskName, _description, NULLIF(_startDate,''), NULLIF(_endDate,''), _lacation, _subTo);
END
Я запускаю это:
call task_tool.SP_create_new_task('name1 ', 'description1', '', '', 'lacation1', 1);
и получил эту ошибку:
Error Code: 1292. Incorrect datetime value: '' for column '_startDate' at row 1
почему NULLIF() не вводит нулевое значение для _startDate???
для вашего удобства запрос таблицы задач:
CREATE TABLE tm_tasks(
ID INT PRIMARY KEY AUTO_INCREMENT,
taskName VARCHAR(30) NOT NULL,
description VARCHAR(500),
joinDate TIMESTAMP,
startDate DATETIME NULL DEFAULT NULL,
endDate DATETIME NULL DEFAULT NULL,
lacation VARCHAR(30),
subTo INT DEFAULT NULL,
ignoreRow TINYINT(1) DEFAULT 0
);
Спасибо!
1 ответ
Решение
Вы получаете эту ошибку, потому что она даже не вставляется.
Код ошибки: 1292. Неправильное значение даты и времени: '' для столбца '_startDate' в строке 1
Здесь не получается:
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_create_new_task`(
IN _taskName VARCHAR(30),
IN _description VARCHAR(500),
**IN _startDate DATETIME**,
Когда вы пытаетесь передать DATETIME
параметр.
Что вы пытаетесь сделать:
'' -> параметр _startDate DATETIME -> INSERT -> NULLIF(_startDate, '') -> NULL
должно быть:
NULL -> параметр _startDate DATETIME -> INSERT -> NULL
Проходить NULL
прямо и не делать обходной путь с NULLIF()
,
CALL task_tool.SP_create_new_task('name1 ', 'description1', NULL, NULL, 'lacation1', 1);