Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PauloTI

[Resolvido] Bloco/PL/SQL/ORACLE

Recommended Posts

Pessoal assim.. vi na internet como achar valores duplicados em uma tabela legal ok.

 

Inseri um cara exatamente igual a outro aqui da minha tabela, porém como excluir um cara duplicado? não tem exatamente um filtro na clausula where que eu possa usar pra deletar.

 

Tentei usar Rownum mas não está dando muito certo! alguém pode me ajudar?

 

MAXIMO QUE SAIU FOI ISSO.

 

DECLARE 
CURSOR RED IS
SELECT ROWNUM QUANT
FROM EMP;

BEGIN

  FOR I IN RED LOOP

    IF I.QUANT = 15 THEN
    DELETE EMP
    WHERE ROWNUM <15;

END IF;      
END LOOP;
END;

 

VALEUUUU

 

ATT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

--DUPLICADOS

 

SELECT CAMPO
FROM TABELA
GROUP BY CAMPO
HAVING COUNT(*) > 1

 

--SELECINANDO

 

SELECT CAMPO,ROWID
FROM TABELA
WHERE CAMPO IN (SELECT CAMPO
			FROM TABELA
			GROUP BY CAMPO
		    HAVING COUNT(*) > 1)

 

 

--BLOCO PARA DELETAR

 

DECLARE
 VCAMPOANT TABELA.CAMPO%TYPE;
BEGIN
 VCAMPOANT  := ' ';
 FOR R IN (SELECT CAMPO,ROWID
		FROM TABELA
		WHERE CAMPO IN (SELECT CAMPO
						FROM TABELA
						GROUP BY CAMPO
					    HAVING COUNT(*) > 1)
           ORDER BY 1,2)
 LOOP
   IF VCAMPOANT = R.CAMPO THEN
     DELETE TABELA WHERE ROWID = R.ROWID;      
   END IF;  
   VCAMPOANT = R.CAMPO;
 END LOOP;
END;

 

--------------

Faz uma salva antes e testa pois foi escrito no notepad, sem teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

--DUPLICADOS

 

SELECT CAMPO
FROM TABELA
GROUP BY CAMPO
HAVING COUNT(*) > 1

 

--SELECINANDO

 

SELECT CAMPO,ROWID
FROM TABELA
WHERE CAMPO IN (SELECT CAMPO
			FROM TABELA
			GROUP BY CAMPO
		    HAVING COUNT(*) > 1)

 

 

--BLOCO PARA DELETAR

 

DECLARE
 VCAMPOANT TABELA.CAMPO%TYPE;
BEGIN
 VCAMPOANT  := ' ';
 FOR R IN (SELECT CAMPO,ROWID
		FROM TABELA
		WHERE CAMPO IN (SELECT CAMPO
						FROM TABELA
						GROUP BY CAMPO
					    HAVING COUNT(*) > 1)
           ORDER BY 1,2)
 LOOP
   IF VCAMPOANT = R.CAMPO THEN
     DELETE TABELA WHERE ROWID = R.ROWID;      
   END IF;  
   VCAMPOANT = R.CAMPO;
 END LOOP;
END;

 

--------------

Faz uma salva antes e testa pois foi escrito no notepad, sem teste.

 

 

 

 

Perfeito MOTTA funcionou direitinho! quando eu crescer eu vou ser que nem você auhsuhuhsuhashuas Bye valeu \o

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.