Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: тригеры в SQLite, немогу написать
Форум на CrossPlatform.RU > Разработка > SQL. Базы данных.
Litkevich Yuriy
Нужен такой тригер в SQLite:
CREATE TRIGGER TBI_tmp
    BEFORE INSERT ON tmp
BEGIN
        /* проверим существует ли такой тип в таблице TypeRef */
    IF (NOT EXISTS(SELECT Type FROM TypeRef WHERE Type = new.Type))THEN
        INSERT INTO TypeRef (Type) VALUE (new.Type);
END;


Первичная Цель:
Есть табличка (TypeRef), отчасти заполненая, мне нужно добавить в нее из другой БД пачку данных, но только тех, которых еще нет (по полю Type).

я ни чего умнее не придумал как сделать временную таблицу (tmp) совать в нее данные и тригером проверять если таких еще нет в основной (TypeRef), то вставить их туда.

Грабля:
ключевого слова IF нет в SQLite (ни в доке и запрос тоже на него возмущается).

Как выйти из положения?
Tonal
Возможно подойдёт when кляуза.
Если нет - можно написать явно в коде или воспользоваться хуками.
Litkevich Yuriy
я пытался еще так сделать
CREATE TEMPORARY TRIGGER TBI_tmp
    BEFORE INSERT ON tmp
BEGIN
        /* проверим существует ли такой тип в таблице TypeRef */
    CASE
    WHEN (NOT EXISTS(SELECT Type FROM TypeRef WHERE Type = new.Type)) THEN
            INSERT INTO TypeRef (Type) VALUE (new.Type);
    END
END;
Но получил совсем неожиданную ошибку: "Нет такой таблицы TypeRef", хотя селект отдельно работает (проверял копированием дабы избежать опечаток), разумеется условие было жесткое.

Цитата(Tonal @ 5.2.2009, 14:52) *
Если нет - можно написать явно в коде или воспользоваться
да я в sqlbrowser'сижу, так что в коде ни чего не делается :)

Я просто действия пытаюсь постичь, которые мне понядобятся при обработке данных
Tonal
Ты таки попялься на синтаксическую диограмму для триггера и попробуй понять о каком именно when я писал. :)
Litkevich Yuriy
... FOR EACH ROW WHEN...
про эту?
Tonal
Ага.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.