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

È stato utile?

Soluzione

Ci sono diverse cose che puoi fare:

    .
  • Utilizzare un SELECT * di aliasuto seguito dai sottostibiettivi.Invece di fare un semplice SELECT * alias la procedura memorizzata selezionabile e utilizza myAlias.*:

    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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top