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

Oracle:मैं किसी ऑब्जेक्ट का नया नाम किसी आफ्टर ALTER ट्रिगर में कैसे निर्धारित करूं?

ALTER RENAME ट्रिगर को सक्रिय नहीं करेगा, RENAME x TO y होगा।

जहां तक ​​पहले और बाद के नामों के बारे में आपके प्रश्न का सवाल है, मुझे लगता है कि आपको उन्हें पुनः प्राप्त करने के लिए डीडीएल को पार्स करना होगा, जैसे:

CREATE OR REPLACE TRIGGER MK_BEFORE_RENAME BEFORE RENAME ON SCHEMA 
DECLARE 
  sql_text ora_name_list_t;
  v_stmt VARCHAR2(2000);
  n PLS_INTEGER; 
BEGIN  
  n := ora_sql_txt(sql_text);
  FOR i IN 1..n LOOP
   v_stmt := v_stmt || sql_text(i);
  END LOOP;

  Dbms_Output.Put_Line( 'Before: ' || regexp_replace( v_stmt, 'rename[[:space:]]+([a-z0-9_]+)[[:space:]]+to.*', '\1', 1, 1, 'i' ) );
  Dbms_Output.Put_Line( 'After: ' || regexp_replace( v_stmt, 'rename[[:space:]]+.*[[:space:]]+to[[:space:]]+([a-z0-9_]+)', '\1', 1, 1, 'i' ) );
END;

नियमित अभिव्यक्ति निश्चित रूप से अधिक स्पष्ट रूप से लिखी जा सकती है, लेकिन यह काम करती है:

RENAME 
mktestx
TO                 mktesty;

Before: mktestx
After: mktesty

अपडेट करें अपने बदले हुए प्रश्न को समायोजित करने के लिए:

CREATE OR REPLACE TRIGGER MK_AFTER_ALTER AFTER ALTER ON SCHEMA 
DECLARE 
  sql_text ora_name_list_t;
  v_stmt VARCHAR2(2000);
  n PLS_INTEGER; 
BEGIN  
  n := ora_sql_txt(sql_text);
  FOR i IN 1..n LOOP
   v_stmt := v_stmt || sql_text(i);
  END LOOP;

  Dbms_Output.Put_Line( 'Before: ' || regexp_replace( v_stmt, 'alter[[:space:]]+table[[:space:]]+([a-z0-9_]+)[[:space:]]+rename[[:space:]]+to.*', '\1', 1, 1, 'i' ) );
  Dbms_Output.Put_Line( 'After: ' || regexp_replace( v_stmt, 'alter[[:space:]]+table[[:space:]]+.*to[[:space:]]+([a-z0-9_]+)', '\1', 1, 1, 'i' ) );
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. oracle 11g या 12c . में तालिका/स्तंभ/सूचकांक नाम आकार बदलें

  2. SQL तालिका मौजूद नहीं है

  3. पैच 19 . स्थापित करने के बाद शुरुआत में Oracle फॉर्म 6i 0xC0000005 के साथ क्रैश हो जाता है

  4. Oracle ISNULL () समतुल्य

  5. Oracle PL/SQL संग्रह - डेटाबेस में नेस्टेड तालिका बनाएँ