Pular para o conteúdo
#100317
rman
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