Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle:Làm cách nào để xác định tên MỚI của một đối tượng trong kích hoạt SAU KHI thay thế?

ALTER RENAME sẽ không kích hoạt trình kích hoạt, RENAME x TO y sẽ.

Đối với câu hỏi của bạn về tên trước và sau, tôi nghĩ bạn sẽ phải phân tích cú pháp DDL để truy xuất chúng, như sau:

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;

Các biểu thức chính quy chắc chắn có thể được viết rõ ràng hơn, nhưng nó hoạt động:

RENAME 
mktestx
TO                 mktesty;

Before: mktestx
After: mktesty

CẬP NHẬT Để đáp ứng câu hỏi đã thay đổi của bạn:

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. PDO_OCI - vào một trường tắc nghẽn

  2. Anaconda 3.5 (Windows 64bit) Cài đặt cx_Oracle

  3. SQL Chọn ngày có doanh số bán tối đa cho từng bộ phận

  4. Làm cách nào để sử dụng kiểu bảng trong câu lệnh CHỌN TỪ?

  5. truy vấn sql để tìm các thuộc tính phù hợp