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?

War es hilfreich?

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 !!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top