Problemas na Criação de View

Firebird

28/10/2005

Bom, meu problema é o seguinte, estou tentando criar uma view dessa forma:

create view TesteView( nome_dom, valor, quant, un, id_prod, id_esp )
as
select d.nome_dom, t1.valor, t1.quant, t1.un, 0 , 0
from tabela1 t1, dominio d where t1.tipo = ´E´ and d.id_dom = t1.id_dom
union
select d.nome_dom, t2.valor, t2.quant, t2.un, t2.prod, 0
from tabela2 t2, dominio d where t2.tipo = ´E´ and d.id_dom = t2.id_dom
union
select d.nome_dom, t3.valor, 0 , 0, t3.prod, t3.esp
from tabela3 t3, dominio d where t3.tipo = ´SE´ and d.id_dom = t3.id_dom


mas tá me retornando o erro: Data Type Unknow (tipo de dados desconhecido). Mas o problema é que os campos estão todos com mesmo tipo. Digo isso porque uso Domínios na criação da tabela (para todos os campos). Por exemplo, tanto na tabela 1, 2 e 3 o campo valor é criado usando o domínio DM_VALORES que é DOUBLE PRECISION.

Já tentei substituir Union por Union All (desespero) mas nada. Trocar o nome do alias da tabela dominio (por 1 nome diferente pra cada select) mas nada. Não gostaria de usar procedure porque na criação da procedure, não posso definir os tipos de dados da saída com domínios, então caso eu tenha que alterar os tipos de dados (domínios) teria que sair alterando as procedures também. Alguém poderia me ajudar?


Firekiller

Firekiller

Curtidas 0

Respostas

Afarias

Afarias

28/10/2005

e qual os tipos dos campos::

t1.quant, t1.un
t2.quant, t2.un, t2.prod
t3.prod, t3.esp

?

T+


GOSTEI 0
Firekiller

Firekiller

28/10/2005

t1.quant e t2.quant são criados a partir de um domínio-DM_Quant Decimal(15,4)

t1.un e t2.un - Domínio DM_SIGLAS VARCHAR(5)

t2.prod, t3.prod e t3.esp - Domínio DM_ID INTEGER

Creio que esqueci de mencionar, uso o Firebird 1.5.2.


GOSTEI 0
Afarias

Afarias

28/10/2005

pra começar, na posição 4 (campo 4) dos 2 primeiros selects vc tem t1.un e t2.un respectivamente .. campos estes q são VARCHAR(5) -- enquanto isso, nesta mesma posição no 3º select vc tem o valor 0 (zero) que pro compilador é INTERGER

dai o erro q vc está recebendo, está misturando VARCHAR com INTERGER -- vc tem q colocar um varchar ai ou dar um CAST


T+


GOSTEI 0
Firekiller

Firekiller

28/10/2005

Obrigado AFarias...

Eu troquei o que você havia dito, e mesmo assim o erro persistia. Então fiz o seguinte, dei um cast em todos os campos (de todos os select´s), colocando seu tipo específico. Daí rodou blz. Então fui tirando 1 a 1 dos cast e descobri que o erro estava no campo UN. Em especial no select que não existia o campo. (Estava relacionado com o que você disse). Bom, ficou assim:


create view TesteView( nome_dom, valor, quant, un, id_prod, id_esp )
as
select d.nome_dom, t1.valor, t1.quant, t1.un, 0 , 0
from tabela1 t1, dominio d where t1.tipo = ´E´ and d.id_dom = t1.id_dom
union
select d.nome_dom, t2.valor, t2.quant, t2.un, t2.prod, 0
from tabela2 t2, dominio d where t2.tipo = ´E´ and d.id_dom = t2.id_dom
union
select d.nome_dom, t3.valor, 0 , cast(´ ´ as varchar(5) ), t3.prod, t3.esp
from tabela3 t3, dominio d where t3.tipo = ´SE´ and d.id_dom = t3.id_dom

dessa forma rodou blz.


GOSTEI 0
Firekiller

Firekiller

28/10/2005

Obrigado AFarias...

Eu troquei o que você havia dito, e mesmo assim o erro persistia. Então fiz o seguinte, dei um cast em todos os campos (de todos os select´s), colocando seu tipo específico. Daí rodou blz. Então fui tirando 1 a 1 dos cast e descobri que o erro estava no campo UN. Em especial no select que não existia o campo. (Estava relacionado com o que você disse). Bom, ficou assim:


create view TesteView( nome_dom, valor, quant, un, id_prod, id_esp )
as
select d.nome_dom, t1.valor, t1.quant, t1.un, 0 , 0
from tabela1 t1, dominio d where t1.tipo = ´E´ and d.id_dom = t1.id_dom
union
select d.nome_dom, t2.valor, t2.quant, t2.un, t2.prod, 0
from tabela2 t2, dominio d where t2.tipo = ´E´ and d.id_dom = t2.id_dom
union
select d.nome_dom, t3.valor, 0 , cast(´ ´ as varchar(5) ), t3.prod, t3.esp
from tabela3 t3, dominio d where t3.tipo = ´SE´ and d.id_dom = t3.id_dom

dessa forma rodou blz.


GOSTEI 0
POSTAR