Question

J'écris un module Drupal et je veux qu'il soit agnostique entre PostgreSQL et MySQL. J'ai un champ qui obtient sa valeur d'une condition, et je l'ai écrit à l'origine en tant que IF(). Ensuite, j'ai découvert que IF() est un ism MySQL. Alors, je regardais les conditionals pour PostgreSQL et CASE semblait être le meilleur outil.

Cependant, je remarque que CASE se termine par END dans PostgreSQL , tandis que dans MySQL se termine par END CASE . Est-ce que cela détruire mes espoirs pour la base de données agnosticisme? Puis-je écrire une requête agnostique avec un conditionnel?

Était-ce utile?

La solution

Si vous utilisez des expressions CASE dans une instruction SELECT, vous devriez regarder à cette page dans le MySQL docs . Comme le montre là, vous utilisez END mettre fin à une expression CASE.

Si, d'autre part, vous utilisez CASE dans le cadre d'une instruction de contrôle de flux (comme vous pouvez utiliser dans une procédure stockée pour exécuter conditionnellement autres déclarations), les deux bases de données utiliseraient END CASE pour mettre fin à une instruction CASE.

Autres conseils

La fonction de la syntaxe SQL entre MySQL et PostgreSQL ne convergent que vous le souhaitez si vous êtes prêt à prendre une chance sur une étrange façon d'imiter la fonction IF () de manière alambiquée:

ECRIRE UNE FONCTION STORED !!!

La fonction SI conditionnelle pourrait être appelée MyIF et procédez comme suit:

  • vous pouvez passer les paramètres nécessaires à MyIF
  • définir quelle que soit la structure CASE ou la logique de procédure stockée que vous voulez
  • vous devrez définir la fonction stockée MyIF dans MySQL et PostgreSQL

Par conséquent, la requête peut être semble être agnostique lorsque vous appelez la fonction MyIF.

Lui donner un essai !!!

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top