[firebase-br] Data type unknown (Em um select utilizando UNION)

paulosxs Yahoo! paulosxs em yahoo.com.br
Sex Ago 24 18:56:57 -03 2007


Vou descrever o que acontece no MS SQL Server, não sabendo se o mesmo se 
aplica ao Fb, uma vez que ainda não me deparei com um caso desse tipo.
Os data types das colunas são determinados pelo primeiro select. Se for 
o campo de uma tabela, o Fb determina o tipo da coluna com base nesse 
campo. Em outros casos, se o Fb não tem como "adivinhar" o tipo da 
coluna, é necessário usar o cast para explicitar o tipo. Os demais 
selects assumem os tipo determinados no primeiro select, gerando um erro 
caso o tipo de uma de suas colunas não seja compatível com o tipo da 
coluna correspondente no primeiro select.


HPensador escreveu:
> Boa tarde Colegas!
>
> Quando tento executar a consulta abaixo recebo a msg de erro - Data
> type unknown.
>
> Obs: todos os campos envolvidos são do tipo Varchar();
>
> select (div.cod_secretaria) as master_field,
>        ('00') as detail_field,
>        sec.nome
> from divisao div
>   join secretaria sec on (sec.cod_secretaria = div.cod_secretaria)
> union
> select (div.cod_secretaria || div.cod_departamento) as master_field,
>        (div.cod_secretaria) as detail_field,
>        dep.nome
> from divisao div
>   join departamento dep on (dep.cod_secretaria = div.cod_secretaria
>                             and dep.cod_departamento =
> div.cod_departamento)
> union
> select (div.cod_secretaria || div.cod_departamento || div.cod_divisao)
> as master_field,
>        (div.cod_secretaria || div.cod_departamento) as detail_field,
>        div.nome
> from divisao div
> order by 1, 2, 3
>
> Porém se executo o mesmo fazendo um CAST dos dados, funciona
> normalmente. vide abaixo:
>
> select cast(div.cod_secretaria as integer) as master_field,
>        cast(null as integer) as detail_field,
>        sec.nome
> from divisao div
>   join secretaria sec on (sec.cod_secretaria = div.cod_secretaria)
> union
> select cast(div.cod_secretaria || div.cod_departamento as integer) as
> master_field,
>        cast(div.cod_secretaria as integer) as detail_field,
>        dep.nome
> from divisao div
>   join departamento dep on (dep.cod_secretaria = div.cod_secretaria
>                             and dep.cod_departamento =
> div.cod_departamento)
> union
> select cast(div.cod_secretaria || div.cod_departamento ||
> div.cod_divisao as integer) as master_field,
>        cast(div.cod_secretaria || div.cod_departamento as integer) as
> detail_field,
>        div.nome
> from divisao div
> order by 1, 2, 3
>
>   





Mais detalhes sobre a lista de discussão lista