пятница, 21 июля 2023 г.

Trigger в SQLITE иногда полезен

 При использовании SQLITE я заметил, что если я создаю уникальный ключ по полю с датой, то при вставке записей с одинаковой датой, база спокойно вводит неограниченное число записей. 

Этот факт я отнес к использованию даты как текст вида "YYYY-MM-DD HH:MM:SS". Для себя я решил эту задачу следующим способом:

Я создал триггер в базе данных скриптом

 DROP TRIGGER trg_validate_products_before_insert;

CREATE TRIGGER trg_validate_products_before_insert BEFORE INSERT
ON [statM]
BEGIN
SELECT
CASE
WHEN (SELECT count(*) FROM [statM] WHERE [doc_datec] like NEW.[doc_datec])>0 THEN
RAISE(ABORT, 'Duble Date')
END;
END;

В квадратных скобках моя таблица и поле. При вводе двойной даты срабатывает исключение (ABORT) и ввод не выполняется.

При вводе я готовлю предложение и выполняю его 

rc = sqlite3_step(insert_stmt);
if(SQLITE_DONE != rc) {
       fprintf(stdout, "insert statement didn't return DONE (%i): %s\n", rc, sqlite3_errmsg(db));
} else {
        printf("INSERT completed\n\n");
}
rc = sqlite3_reset(insert_stmt); 

Если вы выполняете запись в цикле, не забудьте выполнить reset. 

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога