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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top