Cursor

#100317
Avatar de rmanrman
Participante

[quote=”RCBMaps”:10088a2h]Obrigado ultilizei o FORALL éra exatamente o que eu queria.

Segue um exemplo do que eu criei.

DECLARE
CURSOR classes_1 IS
SELECT *
FROM classes;

TYPE fetch_array IS TABLE OF classes%ROWTYPE;
s_array fetch_array;
BEGIN
OPEN classes_1;
LOOP
FETCH classes_1 BULK COLLECT INTO s_array LIMIT 1000;

FORALL i IN 1..s_array.COUNT
INSERT INTO classes_bkp VALUES s_array(i);

EXIT WHEN classes_1%NOTFOUND;

END LOOP;
CLOSE classes_1;
COMMIT;
END;
[/quote]

Acho que cheguei atrasado, o problema já foi resolvido, mas mesmo assim vou registrar outra solução…

A solução é fantástica… É através de MERGE…


SQL> MERGE INTO moto2 a
2 USING moto b
3 ON (a.moto_id = b.moto_id)
4 WHEN MATCHED THEN
5 UPDATE SET a.dono = b.dono
6 WHEN NOT MATCHED THEN
7 INSERT (moto_id, moto_nome, dono)
8 VALUES (b.moto_id, b.moto_nome, b.dono);

Seguindo o artigo:

http://miltonbastos.com/2011/07/29/merge/

É justamente sincronizar 2 tabelas… Que no seu caso é a original com a de backup…

No caso da moto e moto2, se encontrar a linha nas duas tabelas, o campo dono será sincronizado, se não encontrar será inserido… Resultando no final do processo, que as 2 tabelas ficaram identicas…

plugins premium WordPress