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 回答