View indica indice duplicado. Base novinha.
Pessoal,
Tive um problema que alguns CHECK que criei no meu banco de dados criou varias triggers duplicadas, tipo CHECK cli_nome <> ´´. Tinha umas 40 na mesma tabela.
Tive que extrair o META DATA, via IBExpert, e recriar a base do zero (e removi todos os CHECK pra nao dar problema).
Ele vai criando o banco novo certinho porém na hora de criar uma VIEW ele indica:
This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_FIELDS failed.
attempt to store duplicate value (visible to active transactions) in unique index ´RDB$INDEX_15´.
Eu não entendo pois a base de dados é novinha novinha e não tem nada. Nâo existe alguma view ou nada.
A view é:
CREATE VIEW VW_NFENTRADACOMPLETA(
NFE_CODIGO,
NFE_EMPRESA,
NFE_NOTAFISCAL,
NFE_FORNECEDOR,
NFE_CONDPAGAMENTO,
NFE_TOTALPRODUTOS,
NFE_TOTALNOTA,
NFE_BASEICMS,
NFE_VALORICMS,
NFE_SEGURO,
NFE_FRETE,
NFE_OUTRASDESPESAS,
NFE_DTINCLUSAO,
NFE_DTEMISSAO,
NFE_DTSAIDA,
NFE_DTENTRADA,
NFE_DTCANCELAMENTO,
NFE_CFOP,
NFE_FRETECIFFOB,
NFE_TRANSPORTADORA,
NFE_DTCANCELAMENTO,
NFE_MOTIVOCANCELAMENTO,
FOR_FANTASIA,
CDP_DESCRICAO,
CFO_DESCRICAO,
TRA_FANTASIA)
AS
SELECT
NFE_CODIGO,
NFE_EMPRESA,
NFE_NOTAFISCAL,
NFE_FORNECEDOR,
NFE_CONDPAGAMENTO,
NFE_TOTALPRODUTOS,
NFE_TOTALNOTA,
NFE_BASEICMS,
NFE_VALORICMS,
NFE_SEGURO,
NFE_FRETE,
NFE_OUTRASDESPESAS,
NFE_DTINCLUSAO,
NFE_DTEMISSAO,
NFE_DTSAIDA,
NFE_DTENTRADA,
NFE_DTCANCELAMENTO,
NFE_CFOP,
NFE_FRETECIFFOB,
NFE_TRANSPORTADORA,
NFE_DTCANCELAMENTO,
NFE_MOTIVOCANCELAMENTO,
F1.FOR_FANTASIA,
CDP_DESCRICAO,
CFO_DESCRICAO,
F2.FOR_FANTASIA
FROM
NFENTRADA
INNER JOIN
FORNECEDOR F1 ON F1.FOR_CODIGO = NFE_FORNECEDOR
INNER JOIN
CONDPAGAMENTO ON CDP_CODIGO = NFE_CONDPAGAMENTO
INNER JOIN
CFOP ON CFO_CODIGO = NFE_CFOP
INNER JOIN
FORNECEDOR F2 ON F2.FOR_CODIGO = NFE_TRANSPORTADORA
;
Caso algum amigo queira o sql completo de criação eu envio pois não sei o que fazer e preciso mt dessa view.
Obrigado.
Romulo Oliveira
Nova Friburgo - RJ
Tive um problema que alguns CHECK que criei no meu banco de dados criou varias triggers duplicadas, tipo CHECK cli_nome <> ´´. Tinha umas 40 na mesma tabela.
Tive que extrair o META DATA, via IBExpert, e recriar a base do zero (e removi todos os CHECK pra nao dar problema).
Ele vai criando o banco novo certinho porém na hora de criar uma VIEW ele indica:
This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_FIELDS failed.
attempt to store duplicate value (visible to active transactions) in unique index ´RDB$INDEX_15´.
Eu não entendo pois a base de dados é novinha novinha e não tem nada. Nâo existe alguma view ou nada.
A view é:
CREATE VIEW VW_NFENTRADACOMPLETA(
NFE_CODIGO,
NFE_EMPRESA,
NFE_NOTAFISCAL,
NFE_FORNECEDOR,
NFE_CONDPAGAMENTO,
NFE_TOTALPRODUTOS,
NFE_TOTALNOTA,
NFE_BASEICMS,
NFE_VALORICMS,
NFE_SEGURO,
NFE_FRETE,
NFE_OUTRASDESPESAS,
NFE_DTINCLUSAO,
NFE_DTEMISSAO,
NFE_DTSAIDA,
NFE_DTENTRADA,
NFE_DTCANCELAMENTO,
NFE_CFOP,
NFE_FRETECIFFOB,
NFE_TRANSPORTADORA,
NFE_DTCANCELAMENTO,
NFE_MOTIVOCANCELAMENTO,
FOR_FANTASIA,
CDP_DESCRICAO,
CFO_DESCRICAO,
TRA_FANTASIA)
AS
SELECT
NFE_CODIGO,
NFE_EMPRESA,
NFE_NOTAFISCAL,
NFE_FORNECEDOR,
NFE_CONDPAGAMENTO,
NFE_TOTALPRODUTOS,
NFE_TOTALNOTA,
NFE_BASEICMS,
NFE_VALORICMS,
NFE_SEGURO,
NFE_FRETE,
NFE_OUTRASDESPESAS,
NFE_DTINCLUSAO,
NFE_DTEMISSAO,
NFE_DTSAIDA,
NFE_DTENTRADA,
NFE_DTCANCELAMENTO,
NFE_CFOP,
NFE_FRETECIFFOB,
NFE_TRANSPORTADORA,
NFE_DTCANCELAMENTO,
NFE_MOTIVOCANCELAMENTO,
F1.FOR_FANTASIA,
CDP_DESCRICAO,
CFO_DESCRICAO,
F2.FOR_FANTASIA
FROM
NFENTRADA
INNER JOIN
FORNECEDOR F1 ON F1.FOR_CODIGO = NFE_FORNECEDOR
INNER JOIN
CONDPAGAMENTO ON CDP_CODIGO = NFE_CONDPAGAMENTO
INNER JOIN
CFOP ON CFO_CODIGO = NFE_CFOP
INNER JOIN
FORNECEDOR F2 ON F2.FOR_CODIGO = NFE_TRANSPORTADORA
;
Caso algum amigo queira o sql completo de criação eu envio pois não sei o que fazer e preciso mt dessa view.
Obrigado.
Romulo Oliveira
Nova Friburgo - RJ
Romulocpd
Curtidas 0
Respostas
Romulocpd
17/06/2006
Estranho é que eu removi os JOIN e deixei a tabela pura e funcionou. Que doidera.
GOSTEI 0
Orpolonio
17/06/2006
O check cria dois triggers automaticamente, alias,o check é um trigger before insert, before update.
Em se tratando de views procure sempre criar com tabelas com poquissimos registros pois, a view lê todas a tabela,para aquelas com 30 ou 40 registros tudo bem, para tabelas populosas troque a view por um select com a clausula where, isto retorna apenas os registros necessários.
Em se tratando de views procure sempre criar com tabelas com poquissimos registros pois, a view lê todas a tabela,para aquelas com 30 ou 40 registros tudo bem, para tabelas populosas troque a view por um select com a clausula where, isto retorna apenas os registros necessários.
GOSTEI 0
Romulocpd
17/06/2006
Orpolonio,
Esse negocio de criar 2 triggers acho uma solução bem porcaria, mas ja consegui resolver recriando a base e puxando os dados. No IBExperto achei o recurso.
Agora sobre VIEWS se você estiver correto vou ter que trocar então.
Veja, tenho por exemplo uma VIEW: VW_CTSPAGARBUSCA onde nela trago os principais campos de contas a pagar e faço os devidos JOINS com as tabelas auxiliares (fornecedor, centro de custo, tipo de cobrança, portador, forma pagamento, etc...). Dessa forma eu faço um
SELECT * FROM VW_CTSPAGARBUSCA e natela de pesquisar titulos no contas a pagar eu monto o SELECT com os devidos WHERE. Isso quer dizer que primiero a VIEW busca todos os titulos a pagar para depois fazer o WHERE? Eu acredito quenão, mas por favor explique seu conceito pois fiquei bolado agora.
E se algum amigo ai quiser explicar também.
Obrigado.
Romulo
Nova Friburgo - RJ
Esse negocio de criar 2 triggers acho uma solução bem porcaria, mas ja consegui resolver recriando a base e puxando os dados. No IBExperto achei o recurso.
Agora sobre VIEWS se você estiver correto vou ter que trocar então.
Veja, tenho por exemplo uma VIEW: VW_CTSPAGARBUSCA onde nela trago os principais campos de contas a pagar e faço os devidos JOINS com as tabelas auxiliares (fornecedor, centro de custo, tipo de cobrança, portador, forma pagamento, etc...). Dessa forma eu faço um
SELECT * FROM VW_CTSPAGARBUSCA e natela de pesquisar titulos no contas a pagar eu monto o SELECT com os devidos WHERE. Isso quer dizer que primiero a VIEW busca todos os titulos a pagar para depois fazer o WHERE? Eu acredito quenão, mas por favor explique seu conceito pois fiquei bolado agora.
E se algum amigo ai quiser explicar também.
Obrigado.
Romulo
Nova Friburgo - RJ
GOSTEI 0