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

Oracle ट्रिगर हटाने के बाद... म्यूटेटिंग टेबल (ORA-04091) से कैसे बचें?

एक परिवर्तनशील तालिका त्रुटि का मानक समाधान बनाना है

  • कुंजी के संग्रह के साथ एक पैकेज (यानी इस मामले में docId)। एक अस्थायी तालिका भी काम करेगी
  • एक पूर्व कथन ट्रिगर जो संग्रह को प्रारंभ करता है
  • एक पंक्ति-स्तरीय ट्रिगर जो प्रत्येक docId के साथ संग्रह को पॉप्युलेट करता है जो बदल गया है
  • आफ्टर स्टेटमेंट ट्रिगर जो संग्रह पर पुनरावृति करता है और वास्तविक अद्यतन करता है

तो कुछ ऐसा है

CREATE OR REPLACE PACKAGE pkg_document_status
AS
  TYPE typ_changed_docids IS TABLE OF documentos.docId%type;
  changed_docids typ_changed_docids := new typ_changed_docids ();

  <<other methods>>
END;

CREATE OR REPLACE TRIGGER trg_init_collection
  BEFORE DELETE ON documentStatusHistory
BEGIN
  pkg_document_status.changed_docids.delete();
END;

CREATE OR REPLACE TRIGGER trg_populate_collection
  BEFORE DELETE ON documentStatusHistory
  FOR EACH ROW
BEGIN
  pkg_document_status.changed_docids.extend();
  pkg_document_status.changed_docids( pkg_document_status.changed_docids.count() ) := :old.docId;
END;

CREATE OR REPLACE TRIGGER trg_use_collection
  AFTER DELETE ON documentStatusHistory
BEGIN
  FOR i IN 1 .. pkg_document_status.changed_docids.count()
  LOOP
    <<fix the current status for pkg_document_status.changed_docids(i) >>
  END LOOP;
  pkg_document_status.changed_docids.delete();
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि 404 EM 12c के साथ नहीं मिली

  2. Oracle में NLSSORT () फ़ंक्शन

  3. Oracle प्रपत्र एप्लिकेशन में .csv फ़ाइल आयात करना

  4. मैं Oracle SQL डेवलपर में चर का उपयोग कैसे करूं?

  5. एसक्यूएल एक समान क्वेरी पर शून्य मान प्रदर्शित नहीं कर रहा है?