आप निर्देश का उपयोग कर सकते हैं pragma autonomous_transaction
. यह फ़ंक्शन को एक स्वतंत्र लेनदेन में चलाएगा जो ORA-14551 को बढ़ाए बिना DML करने में सक्षम होगा।
ध्यान रखें कि चूंकि स्वायत्त लेनदेन स्वतंत्र है, डीएमएल के परिणाम मूल लेनदेन के दायरे से बाहर होंगे। ज्यादातर मामलों में यह स्वीकार्य समाधान नहीं होगा।
SQL> CREATE OR REPLACE FUNCTION supercomplex(datainput IN VARCHAR2)
2 RETURN VARCHAR2 IS
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 INSERT INTO dumtab VALUES (datainput);
6 COMMIT;
7 RETURN 'done';
8 END supercomplex;
9 /
Function created
SQL> SELECT supercomplex('somevalue') FROM dual;
SUPERCOMPLEX('SOMEVALUE')
--------------------------------------------------------------------------------
done
SQL> select * from dumtab;
A
--------------------------------------------------------------------------------
somevalue
टॉम कायटे के पास इस बारे में एक अच्छी व्याख्या है कि पहली बार में त्रुटि क्यों उठाई जाती है। यह सुरक्षित नहीं है क्योंकि यह उस क्रम पर निर्भर हो सकता है जिसमें पंक्तियों को संसाधित किया जाता है। इसके अलावा, Oracle इस बात की गारंटी नहीं देता है कि फ़ंक्शन कम से कम एक बार और प्रति पंक्ति अधिकतम एक बार निष्पादित किया जाएगा।