SQLITE - Выполнение вставок внутри триггеров - PullRequest
0 голосов
/ 13 июня 2019

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

Это код, который у меня есть:

DROP TRIGGER IF EXISTS AdicionaAmigos; 

CREATE TRIGGER AdicionaAmigos 
AFTER INSERT ON Estudante 
FOR EACH ROW 
BEGIN 
    INSERT INTO Amizade
    VALUES
    (
        SELECT New.ID, Estudante.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    );
    INSERT INTO Amizade
    VALUES
    (
        SELECT Estudante.ID, New.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    );
END;

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

Error: near line 101: near "SELECT": syntax error

строка 101 = СОЗДАТЬ ТРИГГЕР AdicionaAmigos

Версия SQLITE: 3.17

1 Ответ

1 голос
/ 13 июня 2019

В ваших операторах INSERT INTO есть синтаксическая ошибка.Вы должны удалить предложение VALUES и сохранить INSERT INTO...SELECT...:

DROP TRIGGER IF EXISTS AdicionaAmigos; 

CREATE TRIGGER AdicionaAmigos 
AFTER INSERT ON Estudante 
FOR EACH ROW 
BEGIN 
    INSERT INTO Amizade
        SELECT New.ID, Estudante.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
    INSERT INTO Amizade
        SELECT Estudante.ID, New.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
END;

. Подробнее о синтаксисе INSERT INTO можно узнать здесь .Кроме того, отдельные операторы INSERT INTO могут быть объединены в 1 с UNION ALL:

INSERT INTO Amizade
    SELECT New.ID, Estudante.ID 
    FROM Estudante 
    WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    UNION ALL
    SELECT Estudante.ID, New.ID 
    FROM Estudante 
    WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
...