Ein Weg, dies zu tun, könnte sein, eine Einfügung absichtlich scheitern zu lassen, wenn Ihre Behauptung scheitert. Dies ist nicht schön, aber es ist einfach und es funktioniert.
Angenommen, Tabelle1 enthält SpalteA und SpalteB. Sie möchten in diese Tabelle die Werte ('irgendein', 'Ding')
einfügen, aber NUR, wenn diese Werte bestimmte Bedingungen erfüllen.
Dann tun Sie etwas wie das Folgende:
SELECT 'irgendein', 'Ding' INTO @setA, @setB FROM DUAL WHERE ( Ihre Bedingungen...);
INSERT INTO Tabelle1 (SpalteA, SpalteB) VALUES (@setA, @setB);
Die 'irgendein' und 'Ding' Werte würden offensichtlich zur Laufzeit in der Abfrage eingefügt werden. Wenn Ihre Tabelle1 so eingerichtet ist, dass sie nur Nicht-NULL-Werte in Spalte A oder B akzeptiert, schlägt dies fehl, wenn Ihre Bedingungen fehlschlagen.
Ein sehr einfaches unsinniges Beispiel (dies kann natürlich anders erreicht werden, dies ist nur ein Beispiel :-) ), wenn Sie möchten, dass sich die Werte unterscheiden:
SELECT 'irgendein', 'Ding' INTO @setA, @setB FROM DUAL WHERE ( 'a' != 'b');
INSERT INTO Tabelle1 (SpalteA, SpalteB) VALUES (@setA, @setB);
Die Testbedingung muss nicht auf die Werte gerichtet sein, die Sie einzufügen versuchen:
SELECT 'irgendein', 'Ding' INTO @setA, @setB FROM DUAL WHERE ( 'einander' IS NOT NULL);
INSERT INTO Tabelle1 (SpalteA, SpalteB) VALUES (@setA, @setB);
Wenn Ihr Ziel nicht darin besteht, einen Einfügevorgang durchzuführen, kann dieselbe Logik auf verschiedene Transaktionstypen angewendet werden, wobei die Idee darin besteht, die Variablen zu verändern, damit die Abfrage fehlschlägt.
Oder Sie können eine Dummy-Tabelle nur zu diesem Zweck erstellen, mit einer Nicht-NULL-Spalte, und immer das Ergebnis Ihrer Behauptung in die erste Zeile der Dummy-Tabelle einfügen. Nicht schön, aber es funktioniert :-)
0 Stimmen
Mehr Details - was genau suchen Sie für Entscheidungslogik zu verwenden - eine Tabelle, eine Spalte, einen spezifischen Wert?
1 Stimmen
Ich bin in diesem Punkt etwas flexibel, da ich nur sicherstellen möchte, dass es sich um die richtige Datenbank handelt und die Daten nicht schrecklich falsch sind. Ein Blick auf eine count(*) oder min(Feld) (in einem bestimmten Bereich) oder sicherstellen, dass Feld<>'const' oder ähnliches wäre großartig.