Oracle 如何使用正则表达式从DDL查询中删除最后一行和用户名?
我用的是11GR2 我试图查看触发器的定义,但在检查结果时,我在触发器末尾看到了额外的一行ALTER trigger“USER”。“EMP”ENABLE…我不想看到这一行以及“USER”。如何使用正则表达式从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
您可以尝试以下方法:
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;