Oracle 如何使用正则表达式从DDL查询中删除最后一行和用户名?

Oracle 如何使用正则表达式从DDL查询中删除最后一行和用户名?,oracle,oracle11gr2,Oracle,Oracle11gr2,我用的是11GR2 我试图查看触发器的定义,但在检查结果时,我在触发器末尾看到了额外的一行ALTER trigger“USER”。“EMP”ENABLE…我不想看到这一行以及“USER”。如何使用正则表达式从DDL结果中删除它们 查看无用户名触发器定义的我的查询: 结果: 预期结果: 您可以尝试以下方法: SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','EMP'), '(CREATE OR

我用的是11GR2

我试图查看触发器的定义,但在检查结果时,我在触发器末尾看到了额外的一行ALTER trigger“USER”。“EMP”ENABLE…我不想看到这一行以及“USER”。如何使用正则表达式从DDL结果中删除它们

查看无用户名触发器定义的我的查询:

结果:

预期结果:


您可以尝试以下方法:

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