Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Формирование условия для триггера / 16 сообщений из 16, страница 1 из 1
10.12.2010, 14:30
    #37007303
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
Подскажите пожалуйста, в чем ошибка моя?
Пусть есть таблица [Table1] с полем [id],[name].
Создаю триггер, который должен выполнять следующую логику: если в таблице, в которую добавляется поле, присутствует поле с таким же значением, то новое поле не вводится, в противном случае, новое поле добавляется в таблицу.
Тригер имеет код следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TRIGGER [ON_TBL_TABLE1_] 
AFTER INSERT ON [TABLE1] 
FOR EACH ROW WHEN TABLE1.Name=new.Name
BEGIN
DELETE FROM TABLE1 WHERE id = new.id;
END

Когда добавляю новую запись в таблицу

Код: plaintext
INSERT INTO TABLE1(Name) VALUES('egor');
в ответ выдает ошибку SQL Error: no such column: TABLE1.Name
...
Рейтинг: 0 / 0
10.12.2010, 17:59
    #37007938
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
А чем тебя не устраивает команда REPLACE?
...
Рейтинг: 0 / 0
10.12.2010, 18:00
    #37007944
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
И вообще, прежде чем возится с триггерами почитай сначала возможности ON CONFLICT
http://www.sqlite.org/lang_conflict.html
...
Рейтинг: 0 / 0
10.12.2010, 19:59
    #37008106
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
С replace не сталкивался, читаю, пробую...
Создаю таблицу:
Код: plaintext
1.
2.
3.
CREATE TABLE table1(
    id INTEGER PRIMARY KEY not null on conflict REPLACE,
    name varchar( 20 ) not null on conflict REPLACE
);
Добавляю данные, добавляются, не выполняется проверка...

Вопрос по первому посту не исчерпан, почему при проверки условия "WHEN TABLE1.Name=new.Name" в ответ ошибка с тем что не существует TABLE1.Name
...
Рейтинг: 0 / 0
10.12.2010, 20:32
    #37008143
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinС replace не сталкивался, читаю, пробую...
Плохо читаешь.
Код: plaintext
1.
2.
3.
insert or replace into table1(id, name) values( 1 , 'aaa');
insert or replace into table1(id, name) values( 1 , 'bbb');
insert or ignore into table1(id, name) values( 1 , 'ccc');
...
Рейтинг: 0 / 0
10.12.2010, 20:35
    #37008145
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinВопрос по первому посту не исчерпан, почему при проверки условия "WHEN TABLE1.Name=new.Name" в ответ ошибка с тем что не существует TABLE1.NameСкорее всего в том, что [TABLE1] и TABLE1 это разные имена.
...
Рейтинг: 0 / 0
10.12.2010, 21:27
    #37008199
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
White OwlegorbachurinС replace не сталкивался, читаю, пробую...
Плохо читаешь.
Код: plaintext
1.
2.
3.
insert or replace into table1(id, name) values( 1 , 'aaa');
insert or replace into table1(id, name) values( 1 , 'bbb');
insert or ignore into table1(id, name) values( 1 , 'ccc');

Собственно я правильно прочитал и понял... Я именно так и выполнял, за исключением только одного, без принудительного присваивания индекса (который и так автоинкремент):
Код: plaintext
INSERT INTO Table1(name) VALUES('egor');


White OwlegorbachurinВопрос по первому посту не исчерпан, почему при проверки условия "WHEN TABLE1.Name=new.Name" в ответ ошибка с тем что не существует TABLE1.NameСкорее всего в том, что [TABLE1] и TABLE1 это разные имена.
В любом случае выдет ошибку no such column. Здесь не понятно вовсе причины.
...
Рейтинг: 0 / 0
11.12.2010, 07:37
    #37008563
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
Опечатка
Код: plaintext
INSERT OR REPLACE INTO Table1(name) VALUES('egor');
В любом случае, желанного результата нету
...
Рейтинг: 0 / 0
11.12.2010, 14:34
    #37008860
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
Переформулирую вопрос. Как проверять вводимые данные? В смысле, сравнивать вводимое с существующим в таблице. Думаю корректно звучит
...
Рейтинг: 0 / 0
11.12.2010, 18:24
    #37009059
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
Чудес не бывает...
Банальная ошибка с моей стороны. Столбцы в разных таблицах имели одинаковые имена, вот и не выполнялся запрос
...
Рейтинг: 0 / 0
11.12.2010, 19:32
    #37009129
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinWhite Owlпропущено...

Плохо читаешь.
Код: plaintext
1.
2.
3.
insert or replace into table1(id, name) values( 1 , 'aaa');
insert or replace into table1(id, name) values( 1 , 'bbb');
insert or ignore into table1(id, name) values( 1 , 'ccc');

Собственно я правильно прочитал и понял... Я именно так и выполнял, за исключением только одного, без принудительного присваивания индекса (который и так автоинкремент):
Код: plaintext
INSERT INTO Table1(name) VALUES('egor');
Ну а если ты не указываешь первичный ключ принудительно, откуда сервер узнает что новая строка должна заменить уже существующую?
...
Рейтинг: 0 / 0
11.12.2010, 19:33
    #37009131
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinПереформулирую вопрос. Как проверять вводимые данные? В смысле, сравнивать вводимое с существующим в таблице. Думаю корректно звучитСделать уникальный индекс.
...
Рейтинг: 0 / 0
11.12.2010, 20:31
    #37009186
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
White OwlНу а если ты не указываешь первичный ключ принудительно, откуда сервер узнает что новая строка должна заменить уже существующую?
Для этого и думал создать тригер
...
Рейтинг: 0 / 0
11.12.2010, 21:36
    #37009273
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinWhite OwlНу а если ты не указываешь первичный ключ принудительно, откуда сервер узнает что новая строка должна заменить уже существующую?
Для этого и думал создать тригерХорошо, а триггер откуда это узнает?
...
Рейтинг: 0 / 0
11.12.2010, 21:39
    #37009281
egorbachurin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
White Owlпервичный ключ принудительно...
Он же автоинкремент, если я ни чего не путаю
...
Рейтинг: 0 / 0
11.12.2010, 21:56
    #37009303
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование условия для триггера
egorbachurinWhite Owlпервичный ключ принудительно...
Он же автоинкремент, если я ни чего не путаюПравильно, автоинкримент. Это удобно если надо просто добавлять значения. Но ты их хочешь не только добавлять, но и менять или отказываться от изменения если запись уже есть. А значит простой автоинкремент уже не годится. Тебе нужен не абстрактный ключ а основаный на реальных данных. То есть полностью контролируемый и легко предсказуемый.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Формирование условия для триггера / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]