単独で実行すると機能する更新クエリがありますが、ストアド プロシージャ内で呼び出されると文句を言います。
mysql> UPDATE `user` SET `password`=COALESCE(NULL, `password`) WHERE `id`=1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> CALL updateUser(1, NULL, NULL, '1950-02-05', NULL);
ERROR 1048 (23000): Column 'male' cannot be null
ここにストアドプロシージャがあります
DELIMITER $$
CREATE PROCEDURE `updateUser` (IN userId varchar(255), IN password varchar(100), IN male tinyint(1), IN birthday datetime, IN fbId varchar(160))
BEGIN
START TRANSACTION;
UPDATE `user` SET `male` = IFNULL(male, `male`), `password` = IFNULL(password, `password`), `birthday` = IFNULL(birthday, `birthday`) WHERE `id` = userId;
IF fbId IS NOT NULL THEN
...
END IF;
COMMIT;
END
IFNULL の代わりに COALESCE を使用して更新クエリを定義しようとしましたが、結果は同じでした。何が起こっているのか、どうすれば私の手順を機能させることができるのか、誰か知っていますか?