Cursor dinamico duplicando dados

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
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Senhores, estou executando o código abaixo, mas não está 100% correto.

O erro está na duplicação dos dados. Não sei porque no dbms_output.put_line ele mostra o mesmo dado repetidamente como eu mostro abaixo:

Resultado da execução:

INICIO:
FINAL LOOP: MARIO JOSE DE SOUZA MARIO JOSE DE SOUZA
FINAL LOOP: MII MII
FINAL LOOP: 100097000 100097000
INICIO:
FINAL LOOP: YARA LUCIA MARINO YARA LUCIA MARINO
FINAL LOOP: MII MII
FINAL LOOP: 100097095 100097095
INICIO:
FINAL LOOP: YARA LUCIA MARINO YARA LUCIA MARINO
FINAL LOOP: MII MII
FINAL LOOP: 100097095 100097095
INICIO:
FINAL LOOP: YARA LUCIA MARINO YARA LUCIA MARINO
FINAL LOOP: MII MII
FINAL LOOP: 100097095 100097095



Por favor, alguém poderia me ajudar? Como eu resolvo essa duplicação dos dados? ele deveria mostrar somente um e pular para o proximo já que não tem registro duplicados.

Selecionar tudo

declare

      type CursorType is REF CURSOR;   -- ESPECIFICA UM TIPO "REF CURSOR"

      l_cursor  CursorType; -- DEPOIS DECLARA UMA VARIÁVEL DESSE TIPO



  type rec_TMP_STTM_CUST_ACCOUNT is record
  ( AC_DESC      VARCHAR2(105),
    CUST_AC_NO   VARCHAR2(20), 
    BRANCH_CODE  VARCHAR2(3),  
    AC_DESC1     VARCHAR2(105),
    CUST_AC_NO1  VARCHAR2(20),
    BRANCH_CODE1 VARCHAR2(3)    );
  rec rec_TMP_STTM_CUST_ACCOUNT;
  

begin

   -- Montagem da query dinâmica executada 
   v_sql := 'select distinct ' || selectColumns1||', '||selectColumns2 || ' from FLXSTG.' || tableName || ' t1, FLXSTG.' || tableName || ' t2   Where ' || v_result||' and t1.BLOCO_CD ='''||blockCode||''''||
                                                                                                                                               '  and t2.BLOCO_CD ='''||blockCode||''''||
                                                                                                                                               '  and t1.DT = to_date('''||insertDate||''',''yyyy-mm-dd'') '||
                                                                                                                                               '  and t2.DT = to_date('''||p_data||''',''yyyy-mm-dd'') ';
                                                                                               
                                                                                               
--dbms_output.put_line('sql: '||v_sql);
--return;
OPEN l_cursor FOR v_sql;
LOOP 
    FETCH l_cursor INTO rec;
    EXIT WHEN l_cursor%notfound;  
    --v_inicio :=1; 
    
    LOOP 
    
dbms_output.put_line('INICIO: ');
dbms_output.put_line('FINAL LOOP: '||rec.DESC||' '||rec.DESC1);
dbms_output.put_line('FINAL LOOP: '||rec.BRN||' '||rec.BRN1);
dbms_output.put_line('FINAL LOOP: '||rec.CUST||' '||rec.CUST1);
--RETURN;

V_CONT := V_CONT + 1;
IF V_CONT = 1 THEN
EXIT;
END IF;

    END LOOP;
END LOOP;


end;
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Eu testei a query e ela não retorna registro duplicados. Só retorna registro duplicados quando entra no loop.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Porque tem 2 LOOP. O Loop de dentro ta sobrando.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 19 visitantes