Триггер для автоматического добавления кортежей в отношения - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь создать триггер на SQLITE для автоматического добавления кортежей в другую таблицу, когда что-то добавляется в определенную таблицу, но сначала я хочу проверить, принадлежит ли то, что я добавляю, к другой третьей таблице.

Это мой триггер:

DROP TRIGGER IF EXISTS atualizaBibliotecas;

CREATE TRIGGER atualizaBibliotecas
AFTER INSERT ON FoiComprado
FOR EACH ROW
BEGIN
    SELECT CASE 
    WHEN 
    (
        SELECT count(*)
        FROM Album 
        WHERE idItem = NEW.idItem
    ) <> 0
    THEN INSERT INTO Possui(idItem, email, dataAquisicao) VALUES(11,'aaaa@bbbb.com', '2019-05-14');
END;

Это ошибка, которую я получаю:

Error: near line 8: near "INSERT": syntax error

LINE 8:

CREATE TRIGGER atualizaBibliotecas

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Я верю, что вы хотите: -

CREATE TRIGGER atualizaBibliotecas
AFTER INSERT ON FoiComprado
FOR EACH ROW
   WHEN 
    (
        SELECT count(*)
        FROM Album 
        WHERE idItem = NEW.idItem
    ) <> 0
    BEGIN
    INSERT INTO Possui(idItem, email, dataAquisicao) VALUES(11,'aaaa@bbbb.com', '2019-05-14');
END;
0 голосов
/ 26 мая 2019

SQLite не поддерживает логику потока управления в своих триггерах.Вы можете выразить это как условное insert:

INSERT INTO Possui (idItem, email, dataAquisicao)  
   SELECT 11, 'aaaa@bbbb.com', '2019-05-14'
   WHERE NOT EXISTS (SELECT 1 FROM Album a WHERE a.idItem =  NEW.idItem);

Мне кажется удивительным, что вы жестко кодируете 11 для вставки.Я бы ожидал NEW.idITEM.

...