SQL: elenco valori vuoti per il predicato IN (letterali, non sottoquery)

1

Recentemente, mentre scrivevo un codice Spring / JPA, mi sono imbattuto in un problema che di volta in volta affronterò: ho passato una raccolta vuota a un metodo repository che genera un'espressione IN per la clausola WHERE causando un'eccezione di sintassi SQL query ( WHERE column IN () ). Per ovviare a questo problema, restituisco una raccolta vuota in un oggetto DAO, non consentendo l'esecuzione del codice SQL che è sintatticamente non valido (se è giustificato per un caso particolare). Secondo questo riferimento , vuoto () è illegale come IN giusto operando è la seguente:

<in predicate value>    ::=   <table subquery> | <left paren> <in value list> <right paren>

<in value list>    ::=   <value expression> { <comma> <value expression> } ...

richiede che l'elenco valori abbia almeno un valore.

Mi stavo chiedendo: i motori di database SQL restituirebbero solo insiemi di risultati vuoti e la compatibilità con le versioni precedenti verrebbe interrotta se la grammatica SQL consentisse l'elenco di valori vuoto per l'operazione IN ?

    
posta Lyubomyr Shaydariv 22.07.2016 - 17:36
fonte

1 risposta

6

È alquanto improbabile, ma possibile che qualcuno abbia creato codice che cerca questo specifico errore e lo gestisce in un modo speciale che è diverso da quello che farebbe se non ci fossero risultati. Forse potrebbero restituire un errore all'utente. Un tale approccio è una cattiva pratica IMO, ma ho visto (molto) peggio.

Penso che sia un errore che questa sintassi fallisca dato che una selezione annidata che non restituisce risultati all'interno di una clausola in non provoca un errore. Cioè, è un problema di analisi, non semantico.

    
risposta data 22.07.2016 - 18:26
fonte

Leggi altre domande sui tag