Wie behandelt man eine fehlende Funktion von SQLite: Trigger deaktivieren?

8

Wie man mit einem fehlenden Feature von SQLite umgeht: disable triggers ?

Ich habe den Namen der Auslöser für eine bestimmte Tabelle nicht gespeichert.

Wie kann ich zum Beispiel alle Trigger löschen?
Was würdest du tun?

    
Pentium10 12.02.2010, 10:03
quelle

5 Antworten

7

Ich habe eine sehr einfache Erweiterungsfunktion geschrieben, um einen booleschen Wert auf wahr oder falsch zu setzen.

Und eine Funktion zum Abrufen dieses Wertes (GetAllTriggersOn ()).

Mit dieser Funktion kann ich alle meine Trigger definieren wie:

%Vor%     
ralf.w. 23.06.2010, 13:18
quelle
7

SQLite speichert Schemainformationen (Meta-Informationen) in der integrierten Tabelle sqlite_master .

Um eine Liste der verfügbaren Trigger zu erhalten, verwenden Sie die folgende Abfrage:

%Vor%     
Nick Dandoulakis 12.02.2010 11:06
quelle
3

Also hier ist es 2015 und es gibt noch keine "disable triggers" in SQLite. Für eine mobile Anwendung kann dies problematisch sein - insbesondere, wenn es sich um eine Unternehmens-App handelt, die Offline-Funktionalität und lokale Daten erfordert.

Ein anfänglicher Datenladevorgang kann verlangsamt werden, um durch Ausführung des Triggers zu crawlen, selbst wenn Sie nicht jeden Insert in eine einzelne Transaktion umbrechen.

Ich habe dieses Problem mit SQLite SQL ziemlich einfach gelöst. Ich habe eine Einstellungstabelle, die nicht an der Init-Last teilnimmt. Es enthält eine Liste von Schlüssel / Wert-Paaren. Ich habe einen Schlüssel namens "fireTrigger" mit einem Bit-Wert von 0 oder 1. Jeder Trigger, den ich habe, hat einen Ausdruck, der den Wert auswählt und wenn er gleich 1 ist, löst er den Trigger aus, sonst nicht.

Dieser Ausdruck wird zusätzlich zu allen Ausdrücken verwendet, die in den Daten ausgewertet werden, die sich auf den Trigger beziehen. z.B.:

%Vor%

Im einfachen Clean-Effekt kann ich den Trigger mit einem einfachen UPDATE in der Settings-Tabelle deaktivieren / aktivieren

    
Robert Sherman 22.07.2015 14:03
quelle
1

Vielleicht können Sie gespeicherte Prozeduren erstellen, um sie zu löschen und zu erstellen. Ist das gut für dich?

    
anthares 12.02.2010 10:07
quelle
0

Wenn Sie die Antwort von Nick Dandoulakis erweitern, können Sie alle relevanten Auslöser löschen und sie vor dem Abschluss der Transaktion wieder aktivieren:

%Vor%     
Ross Light 16.06.2017 15:22
quelle