我正在研究一个过程,到目前为止,我想出了这个过程,我不确定这是保护我插入的数据的最佳方法。
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。我该怎么做才能避免插入失败并丢失删除的数据?
任何有助于改进我的流程的建议/指南都将不胜感激,谢谢