在plsql中使用多个函数的事务

时间:2014-12-06 12:26:53

标签: plsql oracle11g

我有几个存储过程,例如带有这样的块的newCallLog:

procedure newCallLog(val_one in varchar2, val_two varchar2) is 
begin 
   if val_one = 'Good' then 
   -- insert into a table 
    else
    -- update a table 
    end if ;
end newCallLog ;

procedure newPhoneBill(val_one in varchar2, val_two varchar2) is 
begin 
   if val_one = 'Good' then 
   -- insert into a table 
    else
    -- update a table 
    end if ;
end newPhoneBill;

现在我的问题和关注点是这样,将这两个函数包装在这样的事务中是否合适? ,欢迎任何想法或建议。

procedure saveCallLogs(val_one in varchar2, val_two varchar2) is 
 begin 

  newPhoneBill(val_one, val_two);
  newCallLog(val_one, val_two);
  commit ;
 WHEN  TIMEOUT_ON_RESOURCE THEN 
 RAISE_APPLICATION_ERROR(-20890,'The database server timed out , Please try again later ');
 WHEN  DUP_VAL_ON_INDEX THEN 
 rollback;
 RAISE_APPLICATION_ERROR(-20880,'Some details already exists in the db currently . ');
 end saveCalllogs;

1 个答案:

答案 0 :(得分:0)

这取决于您的业务。 如果子流程“newPhoneBill”与“newCallLog”不可分割,则必须将这两个流程保留在一个事务中。只有两者都是“原子”

示例:

在会计系统中,您总是要完成两项任务: 1.借记录入 2.信贷录入 有效的会计分录始终包含这两个子条目。这意味着没有信用条目就不能存在借记条目,反之亦然!