Триггер MySQL, который вызывает процедуру для установки даты

у меня есть триггер, который устанавливает дату, если дата не установлена ​​​​в операторе вставки следующим образом:

CREATE TRIGGER checkData
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
    IF NEW.schoolDate is null THEN
        SET NEW.schooldate=date(now());
    END IF;
END;

Это хорошо работает. Но теперь я хочу включить это в такую ​​процедуру:

create procedure checkdate(setDate date)
begin
    if setDate is null then
                set setDate = date(now());
    end if;
END;

И я изменил триггер на:

CREATE TRIGGER checkData
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
    call checkdate(NEW.schoolDate);
END;

Но это больше не работает, может кто-нибудь помочь?


person 1337    schedule 22.05.2016    source источник
comment
Альтернативный подход: dev.mysql.com/doc/refman/5.7 /en/timestamp-initialization.html   -  person michaJlS    schedule 22.05.2016


Ответы (1)


Используйте значение по умолчанию вместо триггера. Измените структуру таблицы на

create table students
(
    ...
    schoolDate datetime not null default current_timestamp,
    ...
)

Затем вы можете вставить данные с установленной датой, и если вы не укажете дату, будет использоваться значение по умолчанию.

person juergen d    schedule 22.05.2016
comment
Да, но есть ли способ решить это с помощью триггера? Мне просто интересно, почему мое решение не работает. - person 1337; 24.05.2016
comment
Я предполагаю, что вы даете процедуре значение, а не ссылку. Значение копируется в процедуру и там изменяется, и это не влияет на исходный столбец, который вы хотите изменить, - person juergen d; 24.05.2016