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 存储过程名;语法如此、没特殊用法