我是Oracle PL/SQL的新手,我試圖使用C#將SQL Server調整爲使用PL/SQL的Oracle自定義Web應用程序來實現多層應用程序。多個程序包調用的PL/SQL回滾事務
我正確地在回滾事務時遇到問題。由於我用於編寫可重用代碼,因此我使用這些類中的包和方法編寫了我的PL/SQL代碼。我的更新過程首先完成驗證,如果驗證成功,則調用一系列各種包方法來完成保存。不幸的是,在更新過程的EXCEPTION部分中回滾時,在回滾函數被調用時不會回滾所有內容。我不知道爲什麼這樣做。我的基本代碼(儘管不準確,由於法律問題)如下:
PROCEDURE SaveApplicationData(
variableName IN VARCHAR2 DEFAULT NULL,
--...
seq_id OUT INT)
AS
BEGIN
SET TRANSACTION NAME 'Transaction Name';
--Save initial program record
SaveNewRecord(variableName, seq_id);
IF (seq_id != 0) THEN
--If saved successfully, seq_id represents record ID
package_class.secondarySaveMethod(variableName, seq_id);
second_package_class.anotherSaveMethod(variableName, seq_id);
END IF;
COMMIT;
htp.p('Sequence ID: ' || seq_id);
htp.p('Saved the record"' || programName || '" successfully!');
EXCEPTION
WHEN OTHERS THEN
utilityPackage.rollbacktransaction;
END SaveApplicationData;
的utilityPackage.rollbacktransaction包括ROLLBACK以及我們的組織使用的自定義錯誤的異常處理包。從本質上來說,它將回滾導致錯誤的部分,但只要它回滾該部分,它就會繼續執行其餘的事務(並且不會回滾先前執行的代碼塊)。回到頂端這篇文章中的信息適用於:??????????????????
請讓我知道,如果這沒有任何意義 - 並提前感謝您的幫助!
這聽起來比事情要複雜得多。也許有必要這樣做。無論哪種方式,沒有看到你所有的代碼,我們很難給出任何建議。 – APC
APC - 它以何種方式聽起來太複雜?就代碼而言,它與我的代碼具有相同的結構......它只有較少的變量和不同的名稱。我的主要問題是在包方法中執行回滾 - 是否還應回滾調用包方法的父過程中的代碼? –
回滾影響整個交易。除非你有保存點 – APC