powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
11 сообщений из 11, страница 1 из 1
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830766
roman-info01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Прошу помощи, сам что-то разобраться не могу

Есть база данных, в ней таблица selection соследующей структурой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE selection (
    id              INTEGER       PRIMARY KEY AUTOINCREMENT,
    active_name     VARCHAR (250),
    dt              DATE,
    active_fullname VARCHAR (512),
    price           FLOAT,
    lot             INTEGER,
    rating          VARCHAR (50),
    target          VARCHAR (125),
    image1          VARCHAR,
    image2          VARCHAR,
    caption         TEXT,
    sum             FLOAT
);



Нужно создать триггер.
Использую программу SQLLiteStudio 3.1.1
В ней создаю триггер для данной таблицы, получаю следующий DDL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DROP TRIGGER calc_sum;

CREATE TRIGGER calc_sum
         AFTER UPDATE OF price,
                         lot
            ON selection
BEGIN
    UPDATE selection
       SET sum = round(lot * price, 6);
END;



Теперь, проблема:
Пытаюсь создать триггер, спомощью SQL-команды и получаю ошибку:
Ошибка при выполнении SQL запроса к базе данных '111': cannot commit - no transaction is active
Как так?

Изменил, добавив завершение транзакции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
BEGIN TRANSACTION;

DROP TRIGGER IF EXISTS calc_sum;
CREATE TRIGGER calc_sum
         AFTER UPDATE OF price,
                         lot
            ON selection
BEGIN
    UPDATE selection
       SET sum = round(lot * price, 6);
END;

COMMIT TRANSACTION;



Та же ошибка: Ошибка при выполнении SQL запроса к базе данных '111': cannot commit - no transaction is active

Может, думаю, что-то со средой SQLiteStudio, но написал скрипт на python, который выполняет данный sql-запрос: та же ошибка!

Проверил, базу данных ничего не блокирует

Спасибо за помощь!
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830768
roman-info01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил попробовать - может все дело в поле sum - переименовал его в summ, внес изменения в триггер - та же ошибка
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830770
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-info01
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DROP TRIGGER calc_sum;
commit; -- ???
CREATE TRIGGER calc_sum
         AFTER UPDATE OF price,
                         lot
            ON selection
BEGIN
    UPDATE selection
       SET sum = round(lot * price, 6);
END;
commit;
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830771
roman-info01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
изменил запрос на
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;

DROP TRIGGER IF EXISTS calc_sum;
CREATE TRIGGER calc_sum
         AFTER UPDATE
            ON selection
BEGIN
    UPDATE selection
       SET summ = round(lot * price, 6);
END;


COMMIT TRANSACTION;
PRAGMA foreign_keys = on;



Выполняется без ошибок, но триггер не создается!
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830774
roman-info01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал запустить, как посоветовали:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DROP TRIGGER calc_sum;
commit; -- ???
CREATE TRIGGER calc_sum
         AFTER UPDATE OF price,
                         lot
            ON selection
BEGIN
    UPDATE selection
       SET sum = round(lot * price, 6);
END;
commit;



Та же ошибка.
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830791
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда выкиньте дизайн - сумма или объявляется вычисляемым полем или считается в запросе.
Использовать float для цен - моветон.
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39830929
roman-info01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
легко сказать...

но вы правы, конечно, буду пробовать изменить дизайн таблицы - использовать вычисляемое поле

Но все же - почему не создается триггер?
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39831365
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-info01,

В SQLite 3.28 (использую SQLite Expert) и триггер создаётся и выполняется успешно при обновлении. Ничего не менял особо

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE TABLE selection (
    id              INTEGER       PRIMARY KEY AUTOINCREMENT,
    active_name     VARCHAR (250),
    dt              DATE,
    active_fullname VARCHAR (512),
    price           FLOAT,
    lot             INTEGER,
    rating          VARCHAR (50),
    target          VARCHAR (125),
    image1          VARCHAR,
    image2          VARCHAR,
    caption         TEXT,
    sum             FLOAT
);

CREATE TRIGGER calc_sum
         AFTER UPDATE
            ON selection
BEGIN
    UPDATE selection
       SET sum = round(lot * price, 6);
END;
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39831369
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы исключить неявные действия, а они есть. Я бы принудительно сделал бы так, как показано ниже. Если не указать for each row, то при добавлении NEW, происходит обновление всех строк в таблице, хотя не указав NEW обновляется только текущая строка. Поэтому явно описываем

Код: sql
1.
2.
3.
4.
5.
6.
7.
create trigger calc_sum after update on selection
for each row
begin
    update selection
    set sum = round (NEW.lot * NEW.price, 6)
    where id = OLD.id;
end;
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39831439
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-info01Пытаюсь создать триггер, спомощью SQL-команды и получаю ошибку:
Ошибка при выполнении SQL запроса к базе данных '111': cannot commit - no transaction is active
Как так?
Выкинь нафиг свой SQL Studio. DDL не является транзакцией. DDL команда ошибкой транзакции быть не может в принципе.
...
Рейтинг: 0 / 0
Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
    #39946015
mrpap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была такая же ошибка при добавлении триггера в базу. Поменял версию SQLite Studio с 3.2.1 на 3.0.6 - все заработало.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Коллеги! Помогите разобраться с ошибкой no transaction is active при создании триггера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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