Oracle: Как я определяю НОВОЕ название объекта в “ПОСЛЕ ТОГО, КАК ИЗМЕНЯТ” триггер?

Нет никакого способа сцепиться в под управлением Python, обрабатывают и получают разумные результаты. То, что я делаю, если процессы запираются, сцепляет strace в и пытается выяснить то, что точно происходит.

, К сожалению, часто strace является наблюдателем, который "фиксирует" условия состязания так, чтобы вывод был бесполезен там также.

6
задан Adam Paynter 27 November 2009 в 17:52
поделиться

1 ответ

ALTER RENAME не активирует триггер, RENAME x TO y будет.

Что касается вашего вопроса об именах до и после, я думаю, вы необходимо будет проанализировать DDL, чтобы получить их, например:

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;
6
ответ дан 17 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: