我有几个存储过程,例如带有这样的块的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;
答案 0 :(得分:0)
这取决于您的业务。 如果子流程“newPhoneBill”与“newCallLog”不可分割,则必须将这两个流程保留在一个事务中。只有两者都是“原子”
示例:
在会计系统中,您总是要完成两项任务: 1.借记录入 2.信贷录入 有效的会计分录始终包含这两个子条目。这意味着没有信用条目就不能存在借记条目,反之亦然!