Tenho dois cursores que estou comparando. Eu compararia o cursor1 se existir em todas as linhas do cursor2. Tentei abaixo, mas parece que parou na primeira partida.
CURSOR cursor1 IS
SELECT col1, col2 FROM table1;
CURSOR cursor2 IS
SELECT col1, col3 FROM table2;
c1_rec cursor1%ROWTYPE;
c2_rec cursor2%ROWTYPE;
BEGIN
OPEN cursor1;
OPEN cursor2;
LOOP
FETCH cursor1 INTO c1_rec;
FETCH cursor2 INTO c2_rec;
EXIT WHEN cursor1%NOTFOUND OR cursor2%NOTFOUND;
IF c1_rec.col1 = c2_rec.col1 OR c1_rec.col2 = c2_rec.col3 THEN
DBMS_OUTPUT.PUT_LINE('Match in row: ' || SQL%ROWCOUNT);
END IF;
END LOOP;
CLOSE cursor1;
CLOSE cursor2;
END;
/
Acho que sua lógica pode estar incorreta. Seu loop não comparará o cursor1 se existir em todas as linhas do cursor2. Ele está comparando apenas com uma linha do cursor2 e depois passando para a próxima linha de ambos os cursores. Eu acho que você quer um loop dentro de um loop.
Isso faria o que você descreveu:
No entanto, devo avisar que isso proporcionará um desempenho terrível para dados maiores que 1.000 linhas. Você obteria um desempenho muito melhor fazendo um JOIN.
Exemplo:
Os bancos de dados concluirão uma consulta como essa em milissegundos, mesmo para milhões de linhas.