Fórum Problemas na Criação de View #53663
28/10/2005
0
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
Curtir tópico
+ 0Posts
28/10/2005
Afarias
t1.quant, t1.un
t2.quant, t2.un, t2.prod
t3.prod, t3.esp
?
T+
Gostei + 0
29/10/2005
Firekiller
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
29/10/2005
Afarias
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
30/10/2005
Firekiller
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
30/10/2005
Firekiller
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
Clique aqui para fazer login e interagir na Comunidade :)