[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