Database Agnostic condizionale
-
16-10-2019 - |
Domanda
Sto scrivendo un modulo Drupal e voglio che sia agnostica tra PostgreSQL e MySQL. Ho un campo che prende il suo valore da un condizionale, e ho originariamente scritto come un IF()
. Poi ho scoperto che è un IF()
MySQL-ismo. Così, ho guardato i condizionali per PostgreSQL e CASE
sembrava di essere lo strumento migliore.
Tuttavia, ho notato che CASE
estremità con END
in PostgreSQL , mentre in MySQL termina con END CASE
. Sarà questo distruggere le mie speranze per l'agnosticismo database? Posso scrivere una query agnostica con un condizionale?
Soluzione
Se stai usando espressioni CASE in un'istruzione SELECT, si dovrebbe guardare pagina in MySQL docs . Come si vede lì, si utilizza END
per terminare un'espressione CASE.
Se, d'altra parte, si sta utilizzando CASE come parte di un'istruzione di controllo di flusso (come si potrebbe utilizzare in una stored procedure per eseguire in modo condizionale altre dichiarazioni), entrambi i database userebbero END CASE
per terminare una dichiarazione CASE.
Altri suggerimenti
La funzione della sintassi SQL tra MySQL e PostgreSQL sarà mai convergere come si desidera se non siete disposti a prendere una possibilità su qualche strano modo per emulare la funzione IF () in un modo contorto:
Scrivi una funzione memorizzata !!!
La funzione IF condizionale potrebbe essere chiamato MyIF e procedere come segue:
- si potrebbe passare i parametri necessari per MyIF
- definire qualunque sia la struttura o la logica stored procedure caso si desideri
- si dovrà definire la funzione memorizzata MyIF in MySQL e PostgreSQL
Quindi, la query può essere sembrano essere agnostico quando si chiama la funzione MyIF.
fare un tentativo !!!