автозаполнение значений столбца в хранимой процедуре, вызываемой через триггер - PullRequest
0 голосов
/ 08 апреля 2011

В настоящее время у меня есть куча триггеров, которые делают то же самое.Он вставляется в копию для каждой таблицы, для которой требуется эта функциональность.

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 Ответ

0 голосов
/ 08 апреля 2011

Я могу сказать, что NEW не может быть передан в процедуру, потому что NEW - это псевдоним, представляющий строку. Аргументы процедуры должны быть скалярными значениями, такими как INT, VARCHAR и т. Д.

О 'SET NEW.create_time = CURRENT_TIMESTAMP;'; если поле create_time является TIMESTAMP, вы можете установить значение CURRENT_TIMESTAMP в качестве значения по умолчанию для него.

...