1

11GR2を使用しています

トリガーの定義を確認しようとしていますが、結果を確認すると、トリガーの最後に余分な行が表示されます ALTER TRIGGER "USER"."EMP" ENABLE ....この行と "ユーザー"。正規表現を使用して DDL 結果からそれらを削除するにはどうすればよいですか?

ユーザー名なしでトリガーの定義を表示するための私のクエリ:

SELECT  REGEXP_REPLACE ( REPLACE ( dbms_metadata.get_ddl ('TRIGGER', 'TRIGGER_NAME'), '""USER"".'),'^\s+', NULL, 1, 0, 'm') FROM dual

結果:

CREATE OR REPLACE TRIGGER "USER"."EMP"
    BEFORE INSERT OR UPDATE
    of salary
    on employee
    for each row
   declare
       v_error VARCHAR2(20);
    begin
       if :new.salary > 10
      then
           v_error:=:old.first_name||' cannot have that much!';
           raise_application_error(-20999,v_error);
       end if;
end;
ALTER TRIGGER "USER"."EMP" ENABLE

期待される結果:

CREATE OR REPLACE TRIGGER "EMP"
    BEFORE INSERT OR UPDATE
    of salary
    on employee
    for each row
   declare
       v_error VARCHAR2(20);
    begin
       if :new.salary > 10
      then
           v_error:=:old.first_name||' cannot have that much!';
           raise_application_error(-20999,v_error);
       end if;
end;
4

1 に答える 1

2

次のようなことを試すことができます:

SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','EMP'), 
                     '(CREATE OR REPLACE TRIGGER )("[A-Z]+"\.)(.+)(ALTER TRIGGER .+)', 
                     '\1\3', 1, 0, 'n')
FROM dual;

ここにsqlfiddleのデモがあります

于 2013-09-29T06:13:41.000 に答える