代码之家  ›  专栏  ›  技术社区  ›  Sapo121

oracle处理insert-before-delete语句

  •  0
  • Sapo121  · 技术社区  · 6 年前

    我正在研究一个过程,到目前为止,我想出了这个过程,我不确定这是保护我插入的数据的最佳方法。

    SAVEPOINT start_transaction;
               stmt_ins:= 'INSERT into ' || n_tab2 || ' SELECT * FROM ' || n_tab || ' where criado_em< :dt';  
               EXECUTE IMMEDIATE stmt_ins USING sysdate;
               dbms_output.put_line('value '||SQL%ROWCOUNT);
               DBMS_OUTPUT.PUT_LINE(stmt_ins);
             --  siima_logs_bck.INSE_LOG(1,'TESTE INSERIR','INS_LOGS','2', 'testes insert log');
    
    EXCEPTION 
               WHEN DUP_VAL_ON_INDEX THEN
               ROLLBACK TO start_transaction;
    
    
                       stmt_del:= 'DELETE FROM ' || n_tab || ' WHERE criado_em<:dt';
    
             DBMS_OUTPUT.PUT_LINE(stmt_del);
             EXECUTE IMMEDIATE stmt_del USING SYSDATE;
    

    基本上,我根据tab1的创建日期从tab1 insert获取数据到tab2。我该怎么做才能避免插入失败并丢失删除的数据?

    任何有助于改进我的流程的建议/指南都将不胜感激,谢谢

    0 回复  |  直到 6 年前