#mysql
Вопрос:
Можно ли вставить элемент управления в данные, которые вставляются в таблицу? Способом, который удовлетворяет конкретному условию при условии, что в противном случае не
drop function Presente;
delimiter //
create function Presente( Persona_Da_Cercare varchar(16), Data_Legge date) returns int
begin
declare risultato int;
select count(*) into risultato
from PARLAMENTARI_IN_CARICA as pic
where Persona_Da_Cercare = pic.Persona and data_Legge >= pic.Data_Eletto;
if risultato = 0
then
select count(*) into risultato
from STORICO_PARLAMENTARI as sp
where Persona_Da_Cercare = sp.Persona and data_Legge >= sp.Data_Inizio and data_Legge <= sp.Data_Fine;
end if;
return risultato;
end//
set @ultima_legge bigint;
set @ultimo_parlamentare varchar(16);
set @data_legge date;
drop trigger if exists Ultimo_Voto;
delimiter $
create trigger Ultimo_Voto before insert on VOTO_PALESE
for each row
begin
set @ultima_legge = new.Legge;
set @ultimo_parlamentare = new.parlamentare;
set @data_legge = (select Data_Approvazione from LEGGI where Cod_Legge = new.Legge);
end $
drop trigger if exists Controllo_Voto_Palese;
delimiter $
create trigger Controllo_Voto_Palese after insert on VOTO_PALESE
for each row
BEGIN
IF Presente(@ultimo_parlamentare, @data_legge) = 0 THEN
delete from VOTO_PALESE where Legge = @ultima_legge AND Parlamentare = @ultimo_parlamentare;
END IF;
END $
insert into VOTO_PALESE(Legge, Parlamentare, Voto) values(770, 'MSRMRC01C14L378X', 'astenuto');
когда я запускаю код, он выдает мне эту ошибку
Error Code: 1442. Can't update table 'voto_palese' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Я не понимаю, в чем проблема
Комментарии:
1. сообщение об ошибке ясно, что вы не можете обновить удалить или вставить в ту же таблицу, в которой сработал триггер.
2. хорошо, но тогда невозможно проверить данные, которые я хочу вставить?
3. Когда вы вставляете новую строку, он запускает, что вы можете проверять каждый столбец с новым именем.column, а также изменять его. Чего вы не можете сделать, так это удалить в той же таблице, обновить или вставить. Используйте, если NEW.column = 1, или УСТАНОВИТЕ NEW.column = столбец 1