Firebird.Selecione colunas da tabela.Alguma coluna pode não existir
-
26-12-2019 - |
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 ...
Solução
Há várias coisas que você pode fazer:
Use um alias
SELECT *
seguido pelas subconsultas.Em vez de fazer um simplesSELECT *
você alia o procedimento armazenado selecionável e usamyAlias.*
: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.