0
私はCで300レコードをコミットするために発行されたセーブポイントを持っています。しかし、一度致命的な(0で割る)が来たら、私はレコードを処理し、この致命的なレコードを記録するために1つのテーブルを更新する必要があります。どうすればこの致命的なテーブルだけをコミットし、以前のレコードをロールバックすることができますか。ロールバックと共に中間コミット
私はCで300レコードをコミットするために発行されたセーブポイントを持っています。しかし、一度致命的な(0で割る)が来たら、私はレコードを処理し、この致命的なレコードを記録するために1つのテーブルを更新する必要があります。どうすればこの致命的なテーブルだけをコミットし、以前のレコードをロールバックすることができますか。ロールバックと共に中間コミット
は、SQL Serverを使用する場合:
使用TRY - CATCH方法:致命的なエラーが発生した場合、それはブロックとロールバックトランザクションをキャッチし、1 table.Ifにそのロールバック・更新致命的なレコードの致命的なエラーの後にトランザクションを発生していないに行きますいつも通りコミット。
CREATE PROCEDURE Procedure_Name
(
@Parameter1 Data_type,
@Parameter2 Data_type
)
AS
BEGIN TRY
--- your SQL statements
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
--After rollback fatal record SQL statements
INSERT (or) UPDATE your fatal record
END CATCH
なぜすべてのクローズ票ですか?私はこれが公正な質問だと思う。 (ただし、さらに情報が必要な場合もあります) – jarlh
ログは別のトランザクションで行います。あなたは使用するDBMSをリストしていませんが、Oracleでは 'PRAGMA AUTONOMOUS_TRANSACTION'を使用して、プロシージャが常に別のトランザクションを使用するようにすることができます。 –