Fórum View indica indice duplicado. Base novinha. #56234

17/06/2006

0

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


Romulocpd

Romulocpd

Responder

Posts

17/06/2006

Romulocpd

Estranho é que eu removi os JOIN e deixei a tabela pura e funcionou. Que doidera.


Responder

Gostei + 0

18/06/2006

Orpolonio

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.


Responder

Gostei + 0

19/06/2006

Romulocpd

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


Responder

Gostei + 0

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

Aceitar