Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL, триггеры... Видел что есть там ключевые слова CASE, WHEN - THEN. Похоже на условные конструкции. Значит (...)

Celtic Hammer Мудрец (15908), на голосовании 1 месяц назад
... есть там условия. Как тут тогда прописать в триггер какое-нибудь условие? Например выполнить
INSERT INTO users_log (id,old_name,old_surname, old_age) VALUES (NULL, OLD.name , OLD.surname, OLD.age);
только в том случае если поле OLD.name имеет значение допустим 'Григорий'...
Прямая попытка с этим CASE выдала ошибку..
Он наверное для нескольких условий, а не для одного. Или что там?
 import sqlite3 as sq 

with sq.connect("test10.db") as con:
cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS users2")

cur.execute("""CREATE TABLE IF NOT EXISTS users2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT,
age INTEGER
)
""")

cur.execute("""CREATE TABLE IF NOT EXISTS users_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
old_name TEXT,
old_surname TEXT,
old_age INTEGER
)
""")

cur.execute("""
CREATE TRIGGER IF NOT EXISTS log BEFORE UPDATE
ON users2
BEGIN
INSERT INTO users_log (id,old_name,old_surname, old_age) VALUES (NULL, OLD.name, OLD.surname, OLD.age);
END;
""")

cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Иван','Самарин', 67)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Алесандр','Синицин', 40)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Григорий','Петров', 36)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Федор','Васильев', 10)")

cur.execute("UPDATE users2 SET age = age + 3 WHERE surname LIKE 'Петров'")

cur.execute("SELECT * FROM users2 WHERE surname LIKE 'Петров'")
res = cur.fetchall()
print(res)
cur.execute("SELECT * FROM users_log")
res = cur.fetchall()
print(res)
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (258841) 2 месяца назад
CASE используется в селектах. Триггер можно так нарисовать:
 CREATE TRIGGER IF NOT EXISTS log BEFORE UPDATE  
ON users2
WHEN OLD.name = 'Григорий'
BEGIN
INSERT INTO users_log (id, old_name, old_surname, old_age) VALUES (NULL, OLD.name, OLD.surname, OLD.age);
END;
Похожие вопросы