Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:Bagaimana cara menentukan nama BARU suatu objek dalam pemicu AFTER ALTER?

ALTER RENAME tidak akan memicu pemicu, RENAME x TO y akan.

Adapun pertanyaan Anda tentang nama sebelum dan sesudah, saya pikir Anda harus mengurai DDL untuk mengambilnya, seperti itu:

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;

Ekspresi reguler pasti bisa ditulis lebih jelas, tetapi berhasil:

RENAME 
mktestx
TO                 mktesty;

Before: mktestx
After: mktesty

PERBARUI Untuk mengakomodasi pertanyaan Anda yang diubah:

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. Memindahkan Data dari SQL Server ke Oracle Berulang Kali

  2. Hasilkan file XML dengan tag XML yang Disesuaikan dari tabel database Oracle

  3. Cara mengekspor data dalam jumlah besar menggunakan pengembang sql - Oracle

  4. Perbarui baris duplikat hanya dengan fungsi MAX di SQL

  5. Di Oracle, bagaimana cara memverifikasi tipe objek yang digunakan dari hierarki tipe objek?