2011-10-13 11 views
16

Esistono Validatori SQL in grado di verificare la sintassi su più server di database?Esistono validatori SQL in grado di verificare la sintassi su più server di database?

Ad esempio, potrei voler verificare se una determinata query funzionerà con Oracle, MySQL e SQL Server.

Sono più preoccupato per la sintassi SQL che per lo schema corrente interrogato, quindi uno strumento in grado di rilevare errori di sintassi importanti, come rilevare che la clausola limit non è supportata in SQL Server e Oracle, sarebbe sufficiente.


EDIT:

Diverse risposte hanno suggerito il controllo della sintassi per un particolare DBMS o per ANSI standard.

Quello che sto cercando è una possibilità di targeting di una sorta di unione di funzionalità tra due o più database (ad esempio SQL Server e Oracle). Mi piacerebbe essere in grado di utilizzare qualsiasi funzione SQL supportata da tutti i DBMS che ho scelto come target in una particolare applicazione.

Non sono sicuro che valga la pena. Penso che dipenda dal numero di funzionalità non ANSI condivise da diversi database. Se ce ne sono pochissimi, allora forse sarà meglio puntare allo standard ANSI.

+0

Forse il guscio SQLite potrebbe aiutare. Tuttavia, i join LEFT e FULL non sono implementati e, a differenza di Oracle, puoi selezionare SELECT dal nulla mentre in Oracle devi usare DUAL. – Benoit

+0

per quanti database stai scrivendo? O si tratta di un tentativo di scrivere qualche middleware db agnostico? Forse prova dbms_sql.parse per Oracle, qualcosa di simile (?) Per altri dbms. – tbone

+0

Quali versioni di ciascun database devono convalidare anche. –

risposta

7

io non sono a conoscenza di quelle che sono che specifiche, questi saranno verificare che le dichiarazioni sono valide ANSI 92/99/2003 ...

http://developer.mimer.com/validator/index.htm

Che vi porterà il 99% del strada lì (soprattutto se sta solo facendo operazioni CRUD)

forse se si sa che riservava parole sono usate da quale database si potrebbe rotolare il proprio semplice pedina .. vedi: How to find if a column name is a reserved keyword across various databases

(come già accennato) Se il tuo obiettivo è creare un sistema agnostico di database, pensa ad usare uno strumento di terze parti, ad esempio: spacespaces

+1

Ho perso un sacco di tempo con un semplice errore di sintassi, non ho chiuso parentesi (parentesi tonde) nella dichiarazione di stored procedure. Questo collegamento mi ha aiutato ... [http://developer.mimer.com/validator/parser200x/](http://developer.mimer.com/validator/parser200x/) – Matija

Problemi correlati