यदि आप अपना स्वयं का लॉगिंग रोल करने और किसी तालिका में लॉग इन करने का निर्णय लेते हैं तो आप स्वायत्त लेन-देन पर जा सकते हैं रास्ता।
एक स्वायत्त लेन-देन एक ऐसा लेनदेन है जो आपके वर्तमान लेनदेन से स्वतंत्र रूप से किया जा सकता है।
इस तरह आप अपनी संग्रहीत प्रक्रिया या बैच प्रक्रिया पैरेंट लेनदेन की सफलता या विफलता से स्वतंत्र रूप से अपनी लॉग तालिका में अपनी इच्छित सभी जानकारी लॉग और प्रतिबद्ध कर सकते हैं।
CREATE OR REPLACE PROCEDURE "SP_LOG" (
P_MESSAGE_TEXT VARCHAR2
) IS
pragma autonomous_transaction;
BEGIN
DBMS_OUTPUT.PUT_LINE(P_MESSAGE_TEXT);
INSERT INTO PROCESSING_LOG (
MESSAGE_DATE,
MESSAGE_TEXT
) VALUES (
SYSDATE,
P_MESSAGE_TEXT
);
COMMIT;
END;
/
फिर यदि आप इसे इस तरह कहते हैं, तब भी आप अपनी लॉग टेबल के लिए प्रतिबद्ध संदेश प्राप्त कर सकते हैं, भले ही आपकी विफलता हो और अपना लेन-देन वापस ले लें:
BEGIN
SP_LOG('Starting task 1 of 2');
... code for task 1 ...
SP_LOG('Starting task 2 of 2');
... code for task 2 ...
SP_LOG('Ending Tasks');
... determine success or failure of process and commit or rollback ...
ROLLBACK;
END;
/
आप इसे अपवादों के साथ व्यवस्थित करना चाह सकते हैं जो आपके कोड के लिए समझ में आता है, लेकिन यह सामान्य विचार है, SP_LOG को कॉल में लिखा गया डेटा बना रहता है, लेकिन मूल लेनदेन को अभी भी वापस लाया जा सकता है।