日期:2014-05-17  浏览次数:20814 次

oracle中事务提交和execute

请教大家:1、oracle存储过程中事务是怎样定义的? tran tran_CHG_SHEET_STA;。。。commit tran tran_CHG_SHEET_STA;是这样么?
2、execute HOLD_SHEET_LOCK;这个啥用法,怎么是光秃秃的一个?
CREATE OR REPLACE PROCEDURE CHG_SHEET_STA(
p_SHEET_LVL varchar2,
p_SHEET_ID  varchar2,
p_OPT_ID    int)
AS
new_SHEET_STATUS varchar2(16);
S_ID int;
BEGIN
  
    tran tran_CHG_SHEET_STA;

    execute HOLD_SHEET_LOCK;

    if p_SHEET_LVL is null or p_SHEET_ID is null or p_OPT_ID is null then
      return ;
    end if;
      new_SHEET_STATUS := null;

     execute immediate 'call GET_SHEET_STA_BY_OPT SHEET_LVL(:SHEET_LVL,:SHEET_ID,:OPT_ID,:OPT_ID,:p_new_SHEET_STATUS)'  using p_SHEET_LVL,p_SHEET_ID,p_OPT_ID,new_SHEET_STATUS;

     if new_SHEET_STATUS is not null then
              if p_SHEET_LVL = 'MAIN_SHEET' then 
                     execute immediate 'call CHG_FS_STA(:p1_SHEET_STREAM_NO,:p1_new_SHEET_STATUS)' using p_SHEET_ID, new_SHEET_STATUS;
              elsif p_SHEET_LVL = 'SUB_FAULT' then
                     S_ID := to_number( p_SHEET_ID) ;
                     execute immediate 'call CHG_SFS_STA(:p1_SUB_FAULT_SHEET _ID,:p1_new_SHEET_STATUS)' using S_ID,new_SHEET_STATUS;
             elsif p_SHEET_LVL = 'SUB_SHEET' then
                      S_ID := to_number(p_SHEET_ID) ;
                      execute immediate 'call CHG_SS_STA(:p1_SUB_SHEET_ID,:p1_new_SHEET_STATUS) ' using S_ID,new_SHEET_STATUS;
             end if;
      end if;
      execute immediate 'call CHG_SHEET_FLAG(:SHEET_LVL,:SHEET_ID,:OPT_ID)' using p_SHEET_LVL,p_SHEET_ID,p_OPT_ID

           commit tran tran_CHG_SHEET_STA;
END;
事务 execute

------解决方案--------------------
1)存储过程中的事务定义没有区别、或者隐式开启、或者显示开启(begin transaction 。。。)
2)exec 存储过程名;语法如此、没特殊用法