Fórum Problemas na Criação de View #53663

28/10/2005

0

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

Responder

Posts

28/10/2005

Afarias

e qual os tipos dos campos::

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

?

T+


Responder

Gostei + 0

29/10/2005

Firekiller

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.


Responder

Gostei + 0

29/10/2005

Afarias

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+


Responder

Gostei + 0

30/10/2005

Firekiller

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.


Responder

Gostei + 0

30/10/2005

Firekiller

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar