Pergunta

Eu tenho uma consulta semelhante:

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')

A consulta funciona em sua forma original mas o problema é que em alguns dos bancos de dados(versões antigas) que eu consulto alguns dos campos a b c d e estão faltando no resultado do procedimento armazenado 'relatório' e recebo um erro. Qual seria a melhor maneira de lidar com isso?Estava pensando em selecionar * nos relatórios, mas não consigo adicionar as subconsultas.Pode ser que não encontrei a sintaxe certa para fazer isso. Outra maneira seria verificar se as colunas existam antes de fazer a seleção ...

Foi útil?

Solução

Há várias coisas que você pode fazer:

  • Use um alias SELECT * seguido pelas subconsultas.Em vez de fazer um simples SELECT * você alia o procedimento armazenado selecionável e usa myAlias.*:

    SELECT 
      r.*,
      (select somevalue from differenttable where report.a = two.a) as two,
      ...
    from "report"('01.01.2010', '01.10.2010') r
    

    Observe que isso tem suas próprias desvantagens, como mover o problema das "colunas ausentes" da consulta para o consumidor da consulta.

  • Atualize seus bancos de dados para que o procedimento armazenado corresponda às suas expectativas.

  • Crie dinamicamente a consulta a partir dos metadados do procedimento.Isso é bastante complexo e atualmente não tenho tempo para dar um exemplo completo disso.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top