Datenbank Agnostische bedingte
-
16-10-2019 - |
Frage
Ich schreibe ein Drupal -Modul und möchte, dass es zwischen Postgresql und MySQL agnostisch ist. Ich habe ein Feld, das seinen Wert von einem bedingten erhält, und ich habe es ursprünglich als eine geschrieben IF()
. Dann fand ich das heraus IF()
ist ein MySQL-ISM. Also habe ich die Bedingungen für PostgreSql und nachgeschlagen CASE
schien das beste Werkzeug zu sein.
Das bemerkte ich jedoch CASE
endet mit END
In PostgreSQL, während in Mysql es endet mit END CASE
. Wird dies meine Hoffnungen auf Datenbank -Agnostizismus zerstören? Kann ich eine agnostische Abfrage mit einer bedingten schreiben?
Lösung
Wenn Sie Fallausdrücke in einer ausgewählten Anweisung verwenden, sollten Sie sich ansehen Diese Seite in den MySQL -Dokumenten. Wie dort gezeigt, verwenden Sie END
um einen Fallausdruck zu beenden.
Wenn Sie andererseits den Fall als Teil einer Flow Control -Anweisung verwenden (wie Sie möglicherweise in einer gespeicherten Prozedur verwendet werden, um andere Anweisungen bedingt auszuführen), würden beide Datenbanken verwendet END CASE
um eine Fallerklärung zu beenden.
Andere Tipps
Die SQL -Funktionssyntax zwischen MySQL und PostgreSQL wird niemals nach Belieben konvergieren, es sei denn, Sie sind bereit, auf eine seltsame Art und Weise eine Chance zu nutzen, um die iF () -Funktion auf verworrene Weise zu emulieren:
Schreiben Sie eine gespeicherte Funktion !!!
Die if -bedingte Funktion könnte MyIF genannt werden und folgendermaßen ausführen:
- Sie könnten die notwendigen Parameter an Myif übergeben
- Definieren Sie die gewünschte Fallstruktur oder die gespeicherte Prozedurlogik
- Sie müssen die gespeicherte MyIF -Funktion in MySQL und PostgreSQL definieren
Daher kann die Abfrage beim Aufrufen der MyIF -Funktion agnostisch zu sein.
Versuche es !!!