View que acessa outro banco via linkdb não traz todos regs.

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
socramax
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 26 Ago 2009 2:58 pm
Localização: SP

Olá,

Tenho uma view que acessa um outro banco via linkdb mas ela não esta trazendo todos os registros. Abaixo o select da view.

Selecionar tudo

SELECT 
   SUBSTR(NM_ARQUIVO,1,8)OUTPUT,
   NU_LOTE,
   TO_CHAR(SQ_INICIAL,'999999999999999') SEQINI
FROM  
   TB_LOTE@BD_INC.US.ORACLE.COM
WHERE 
   NM_ARQUIVO  IS NOT NULL
AND  SUBSTR(NU_LOTE,1,3) = 'L09'
Obs: rodando este mesmo select no banco original da TB_LOTE os registros aparecem todos.

Obrigado
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Vá por partes. Tente dar um count(*) sem cláusula where, depois adicione uma linha por vez no where e vá comparando sempre a quantidade retornada.

Não deveria dar diferenças a menos que esse banco do lado de lá do dblink utilize mecanismo de VPD com fine-grained access control.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

veja se o usuario do dblink é o mesmo que você utiliza na conexão normal,

as vezes o dblink ta conectando em outro esquema.
socramax
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 26 Ago 2009 2:58 pm
Localização: SP

Pessoal Obrigado pela ajuda!
Eu consegui descobrir o que aconteceu.
Na tabela original alguns registros tinham sido excluídos e depois incluídos novamente e eram exatamente estes registros que não estavam aparecendo na view.
Eu deletei a view e crie de novo e todos os registros voltaram a aparecer.
Consegui resolver o problema, mas continuo sem saber porque depois de inseridos os registros eles não apareceram na view.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Se a view for materializada você tem que dar o comando pra mandar atualizar os dados,

qual o comando de criacao?

create view ou create materialized view?
socramax
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 26 Ago 2009 2:58 pm
Localização: SP

O comando é create view!
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Na verdade, se usa a package DBMS_MVIEW.

Selecionar tudo

BEGIN
  DBMS_MVIEW.REFRESH('MINHA_MVIEW');
END;
Isso se a materialized view for com refresh on demand. Na maior parte dos casos, onde possível, o ideal é usar o fast refresh. O fast refresh faz atualização no commit das alterações em tabelas por baixo da materialized view. Ele garante que você vai estar sempre vendo os dados de forma atualizada, mas tem limitações quanto à complexidade do SQL usado na materialized view.
Responder
  • Informação