Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ SQL. Базы данных. _ тригеры в SQLite, немогу написать

Автор: Litkevich Yuriy 5.2.2009, 11:19

Нужен такой тригер в 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 (ни в http://www.sqlite.org/lang.html и запрос тоже на него возмущается).

Как выйти из положения?

Автор: Tonal 5.2.2009, 11:52

Возможно подойдёт http://www.sqlite.org/lang_createtrigger.html.
Если нет - можно написать явно в коде или воспользоваться http://www.sqlite.org/c3ref/update_hook.html.

Автор: Litkevich Yuriy 5.2.2009, 12:15

я пытался еще так сделать

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 6.2.2009, 8:49

Ты таки попялься на синтаксическую диограмму для триггера и попробуй понять о каком именно when я писал. :)

Автор: Litkevich Yuriy 6.2.2009, 9:00

... FOR EACH ROW WHEN...
про эту?

Автор: Tonal 6.2.2009, 11:11

Ага.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)