Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

समाधान एक क्वेरी के अंदर एक डीएमएल ऑपरेशन नहीं कर सकता है?

आप निर्देश का उपयोग कर सकते हैं 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 इस बात की गारंटी नहीं देता है कि फ़ंक्शन कम से कम एक बार और प्रति पंक्ति अधिकतम एक बार निष्पादित किया जाएगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब पैरामीटर दर्ज नहीं किया जाता है, तो उस खंड में दिनांक सीमा पैरामीटर पर ध्यान न दें

  2. त्रुटि:PLS-00428:इस चयन कथन में एक खंड में अपेक्षित है

  3. Oracle:शर्त के साथ पूर्ण पाठ खोज

  4. खाली तालिका के MAX () को NULL के बजाय 0 के रूप में कैसे व्यवहार करें?

  5. Oracle डाटाबेस 11g के लिए हाइबरनेट बोली?