然后主程序是这样写的,请问如何实现Insert 出现错误的时候,业务流水号也能回滚????就是不加一???
CREATE OR REPLACE PROCEDURE CP_DA_INTSTT1(i_vMainSN VARCHAR2, --工单流水号 bbbbbYYYYMMDDnnnnnn
i_vBusiness VARCHAR2, --业务编码
i_vExchange VARCHAR2, --工单区域归属编码
o_sRetval OUT SMALLINT) IS
vMainSN VARCHAR2(20);
iError INTEGER;
iErrorNo INTEGER;
iDebugNum INTEGER;
vErrmsg VARCHAR2(255);
iDebugFlag INTEGER;BEGIN
--====获取业务流水号==============================================
BEGIN
iError := 0;
cp_da_Get_MainSN(i_vBusiness, vMainSN, o_sRetVal);
EXCEPTION
WHEN OTHERS THEN
iError := SQLCODE;
END; BEGIN
INSERT INTO da_MainQueue
(MainSN, --工单流水号 bbbbbYYYYMMDDnnnnnn
Business, --业务编码
Exchange, --工单区域归属编码
XXX)
VALUES
(vMainSN, --工单流水号
i_vBusiness, --业务编码
i_vExchange,
NULL); --这里会出错.但是业务流水号如何回滚???????
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
iError := SQLCODE;
END; IF iError != 0
THEN
iErrorNo := iError;
vErrMsg := 'INSERT da_InsertRecord Fail !';
o_sRetval := 1;
iDebugNum := 16;
GOTO ERROR0;
END IF; GOTO End0; <<error0>>
ROLLBACK;
<<END0>>
COMMIT;
END CP_DA_INTSTT1;
CREATE OR REPLACE PROCEDURE CP_DA_INTSTT1(i_vMainSN VARCHAR2, --工单流水号 bbbbbYYYYMMDDnnnnnn
i_vBusiness VARCHAR2, --业务编码
i_vExchange VARCHAR2, --工单区域归属编码
o_sRetval OUT SMALLINT) IS
vMainSN VARCHAR2(20);
iError INTEGER;
iErrorNo INTEGER;
iDebugNum INTEGER;
vErrmsg VARCHAR2(255);
iDebugFlag INTEGER;BEGIN
--====获取业务流水号==============================================
BEGIN
iError := 0;
cp_da_Get_MainSN(i_vBusiness, vMainSN, o_sRetVal);
EXCEPTION
WHEN OTHERS THEN
iError := SQLCODE;
END; BEGIN
INSERT INTO da_MainQueue
(MainSN, --工单流水号 bbbbbYYYYMMDDnnnnnn
Business, --业务编码
Exchange, --工单区域归属编码
XXX)
VALUES
(vMainSN, --工单流水号
i_vBusiness, --业务编码
i_vExchange,
NULL); --这里会出错.但是业务流水号如何回滚???????
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
iError := SQLCODE;
END; IF iError != 0
THEN
iErrorNo := iError;
vErrMsg := 'INSERT da_InsertRecord Fail !';
o_sRetval := 1;
iDebugNum := 16;
GOTO ERROR0;
END IF; GOTO End0; <<error0>>
ROLLBACK;
<<END0>>
COMMIT;
END CP_DA_INTSTT1;
一起commit,rollback
查查是不是没有触发异常,或在取业务流水号是已经commit,或已自动commit,
如果没有,直接在每个
when others then 后加
rollback;试试。
我好像是没有把获得流水好的存储过程中的Commit和Rollback去掉,去掉之后就可以了.谢谢各位!!!
想想这也是当时我在类的设计上的失败,惭愧惭愧!!!