Em geral, os procedimentos não devem ser confirmados. Esses tipos de decisões de controle de transação devem ser deixados no código de nível superior que sabe quando uma transação lógica está realmente concluída. Se você confirmar dentro de um procedimento armazenado, estará limitando sua reutilização, porque um chamador que deseja que as alterações que o procedimento faz parte de uma transação maior não pode simplesmente chamar o procedimento diretamente.
Se você chamar um procedimento interativamente, terá que confirmar ou reverter explicitamente a transação, porque o Oracle não tem idéia se você pretende que a chamada de procedimento seja uma transação lógica ou se deseja compor uma transação maior envolvendo várias chamadas de procedimento. Se você usar dbms_scheduler
, dbms_scheduler
assume que um trabalho é uma transação lógica e é confirmado no final do trabalho, assumindo que foi bem-sucedido ( dbms_job
faz a mesma coisa).
As funções não devem manipular dados em primeiro lugar. Uma função que manipula dados não pode ser chamada a partir de uma instrução SQL (exceto no caso de canto em que a própria função é declarada para usar uma transação autônoma que quase nunca é apropriada). O objetivo de ter funções e procedimentos é que as funções podem ser incorporadas nas instruções SQL e podem ser concedidas mais livremente aos usuários, porque eles não alteram nenhum dado.