Автозаполнение значений столбца в хранимой процедуре, вызываемой через триггер
В настоящее время у меня есть куча триггеров, которые делают то же самое. Это вставляется в копию для каждой таблицы, которая нуждается в этой функции.
delimiter $$
create trigger user_before_insert before insert on user for each row
begin
set NEW.create_time = CURRENT_TIMESTAMP;
set NEW.create_user_id = @user_id;
set NEW.modify_time = CURRENT_TIMESTAMP;
set NEW.modify_user_id = @user_id;
end$$
create trigger user_before_update before update on user for each row
begin
set NEW.modify_time = CURRENT_TIMESTAMP;
set NEW.modify_user_id = @user_id;
end$$
Можно ли обернуть строки, которые изменяют OLD
и / или NEW
в хранимые процедуры, которые вызываются через триггеры? Что-то вроде этого:
delimiter $$
create procedure autofill_on_insert(inout NEW data_type) -- what would be the data_type?
begin
set NEW.create_time = CURRENT_TIMESTAMP;
set NEW.create_user_id = @user_id;
set NEW.modify_time = CURRENT_TIMESTAMP;
set NEW.modify_user_id = @user_id;
end$$
create procedure autofill_on_update(inout NEW data_type) -- what would be the data_type?
begin
set NEW.modify_time = CURRENT_TIMESTAMP;
set NEW.modify_user_id = @user_id;
end$$
delimiter ;
create trigger user_before_insert before insert on user
for each row call autofill_on_insert(NEW);
create trigger user_before_update before update on user
for each row call autofill_on_update(NEW);
Дополнительный вопрос: если это возможно, есть ли способ проверить, NEW
содержит конкретные столбцы? Есть таблицы, которые не имеют modify_time
а также modify_user_id
,
1 ответ
Я могу сказать, что NEW нельзя передать в процедуру, потому что NEW - это псевдоним, представляющий строку. Аргументы процедуры должны быть скалярными значениями, такими как INT, VARCHAR и т. Д.
О 'SET NEW.create_time = CURRENT_TIMESTAMP;'; если поле create_time
является TIMESTAMP, вы можете установить CURRENT_TIMESTAMP в качестве значения по умолчанию для него.