crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> тригеры в SQLite, немогу написать
Litkevich Yuriy
  опции профиля:
сообщение 5.2.2009, 11:19
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Нужен такой тригер в 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 (ни в доке и запрос тоже на него возмущается).

Как выйти из положения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 5)
Tonal
  опции профиля:
сообщение 5.2.2009, 11:52
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Возможно подойдёт when кляуза.
Если нет - можно написать явно в коде или воспользоваться хуками.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.2.2009, 12:15
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я пытался еще так сделать
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
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Ты таки попялься на синтаксическую диограмму для триггера и попробуй понять о каком именно when я писал. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.2.2009, 9:00
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


... FOR EACH ROW WHEN...
про эту?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 6.2.2009, 11:11
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Ага.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 2:32