Firebird.Seleziona colonne dalla tabella. La colonna non può esistere
-
26-12-2019 - |
Domanda
Ho una query simile:
select
a,
b,
c,
d,
e,
(select somevalue from differenttable where report.a = two.a) as two,
(select somevalue from differenttable2 where report.a = three.a) as three,
(select sum(kol*CAST(price AS BIGINT)) from "otherreport"('01.01.2010', '01.10.2010') as sum
from "report"('01.01.2010', '01.10.2010')
.
La query funziona nella sua forma originale, ma il problema è che in alcuni dei database (vecchie versioni) che interrogo alcuni campi A, B, C, D, E manca nel risultato di "Report"Procedura memorizzata e ottengo un errore. Quale sarebbe il modo migliore per gestirlo? Stavo pensando a selezionare * dai rapporti, ma non riesco a aggiungere i sottoqueri.Potrebbe essere non riesco a trovare la sintassi giusta per farlo. Un altro modo sarebbe verificare se le colonne esistono prima Rendere la selezione ...
Soluzione
Ci sono diverse cose che puoi fare:
- .
-
Utilizzare un
SELECT *
di aliasuto seguito dai sottostibiettivi.Invece di fare un sempliceSELECT *
alias la procedura memorizzata selezionabile e utilizzamyAlias.*
:
.SELECT r.*, (select somevalue from differenttable where report.a = two.a) as two, ... from "report"('01.01.2010', '01.10.2010') r
Si noti che questo ha i suoi dintorni, come spostare il problema "colonne mancanti" dalla query al consumatore della query.
-
Aggiorna i tuoi database in modo che la stored procedure corrisponda alle tue aspettative.
- Costruisci dinamicamente la query dai metadati della procedura.Questo è piuttosto complesso, e attualmente non ho il tempo di dare un intero esempio di questo.