SQLite отбрасывает таблицу при удалении строки в другой таблице - PullRequest
0 голосов
/ 06 мая 2018

Я боролся с настройкой триггера и продолжаю получать ошибку:

Ошибка логики SQL рядом с «DROP»: синтаксическая ошибка

У меня есть несколько таблиц main_table, other_one, other_two и т. Д.

  1. main_table имеет несколько столбцов с столбцом первичного ключа с именем filehash
  2. Значения в столбце первичного ключа main_table также являются именами других _ * таблиц

Итак, если я удаляю строку в main_table с первичным ключом other_one , я хочу, чтобы триггер отбрасывал таблицу other_one тоже

Вот оператор триггера, который выдает ошибку

CREATE TRIGGER remove_other_one AFTER DELETE ON 'main_table' 
WHEN (OLD.filehash == 'other_one')
BEGIN
 DROP TABLE IF EXISTS 'other_one' ; 
END remove_other_one;

РЕДАКТИРОВАТЬ: «полная» ошибка, которую я получаю при запуске оператора триггера в браузере БД SQLite:

возле «DROP»: синтаксическая ошибка: CREATE TRIGGER remove_other_one ПОСЛЕ УДАЛЕНИЯ ON 'main_table' WHEN (OLD.filehash == 'other_one') BEGIN DROP

1 Ответ

0 голосов
/ 06 мая 2018

На основании SQLite триггер doc Я считаю, что это невозможно:

enter image description here

Нет опции для DDL / динамического SQL внутри триггера.

Полагаю, вы хотели достичь чего-то вроде PostgreSQL DBFiddle Demo 1 и Demo 2

Вы можете обработать ваше дело в коде приложения. В любом случае таблица на дату / клиент / хэш почти всегда указывает на плохой дизайн и в долгосрочной перспективе вызовет больше проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...