Problemas na Criação de View
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?
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
Curtidas 0
Respostas
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+
t1.quant, t1.un
t2.quant, t2.un, t2.prod
t3.prod, t3.esp
?
T+
GOSTEI 0
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.
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
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+
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
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.
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
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.
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