← Tous les exercices
Un trigger BEFORE INSERT qui refuse une donnée invalide
Partie 3 · ★★★
Quels contrôles doivent avoir lieu avant une écriture ? Ici : un budget estimatif négatif n'a pas de sens. Un trigger BEFORE INSERT peut interrompre l'opération avec RAISE(ABORT, 'message') (syntaxe SQLite : exemple adapté).
Complète le trigger. L'insertion invalide doit lever une erreur (capturée dans erreur) et la ligne valide doit être conservée.
import sqlite3 con = sqlite3.connect(":memory:", isolation_level=None) con.executescript(""" CREATE TABLE marche(id INTEGER PRIMARY KEY, titre TEXT, budget REAL); CREATE TRIGGER trg_budget ___ INSERT ON marche WHEN NEW.budget < 0 BEGIN SELECT RAISE(___, 'budget négatif'); END; """) erreur = None try: con.execute("INSERT INTO marche(titre, budget) VALUES ('Mauvais', -5)") except sqlite3.DatabaseError as e: erreur = str(e) con.execute("INSERT INTO marche(titre, budget) VALUES ('Bon', 1000)") nb = con.execute("SELECT COUNT(*) FROM marche").fetchone()[0]
Ctrl/⌘+Entrée