powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Формирование условия для триггера
16 сообщений из 16, страница 1 из 1
Формирование условия для триггера
    #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
Формирование условия для триггера
    #37007938
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем тебя не устраивает команда REPLACE?
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37007944
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, прежде чем возится с триггерами почитай сначала возможности ON CONFLICT
http://www.sqlite.org/lang_conflict.html
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #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
Формирование условия для триггера
    #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
Формирование условия для триггера
    #37008145
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorbachurinВопрос по первому посту не исчерпан, почему при проверки условия "WHEN TABLE1.Name=new.Name" в ответ ошибка с тем что не существует TABLE1.NameСкорее всего в том, что [TABLE1] и TABLE1 это разные имена.
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #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
Формирование условия для триггера
    #37008563
egorbachurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опечатка
Код: plaintext
INSERT OR REPLACE INTO Table1(name) VALUES('egor');
В любом случае, желанного результата нету
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37008860
egorbachurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переформулирую вопрос. Как проверять вводимые данные? В смысле, сравнивать вводимое с существующим в таблице. Думаю корректно звучит
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37009059
egorbachurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чудес не бывает...
Банальная ошибка с моей стороны. Столбцы в разных таблицах имели одинаковые имена, вот и не выполнялся запрос
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #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
Формирование условия для триггера
    #37009131
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorbachurinПереформулирую вопрос. Как проверять вводимые данные? В смысле, сравнивать вводимое с существующим в таблице. Думаю корректно звучитСделать уникальный индекс.
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37009186
egorbachurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlНу а если ты не указываешь первичный ключ принудительно, откуда сервер узнает что новая строка должна заменить уже существующую?
Для этого и думал создать тригер
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37009273
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorbachurinWhite OwlНу а если ты не указываешь первичный ключ принудительно, откуда сервер узнает что новая строка должна заменить уже существующую?
Для этого и думал создать тригерХорошо, а триггер откуда это узнает?
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37009281
egorbachurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlпервичный ключ принудительно...
Он же автоинкремент, если я ни чего не путаю
...
Рейтинг: 0 / 0
Формирование условия для триггера
    #37009303
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorbachurinWhite Owlпервичный ключ принудительно...
Он же автоинкремент, если я ни чего не путаюПравильно, автоинкримент. Это удобно если надо просто добавлять значения. Но ты их хочешь не только добавлять, но и менять или отказываться от изменения если запись уже есть. А значит простой автоинкремент уже не годится. Тебе нужен не абстрактный ключ а основаный на реальных данных. То есть полностью контролируемый и легко предсказуемый.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Формирование условия для триггера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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