我的查询在我的oracle中运行正常,但是当我在oracle命令中添加它时,在[A-Z]和\ 1 \ 3处收到错误,说出无法识别的字符。我想我需要使用@ some where to make it correct但我不知道在哪里?
* 我的查询以查看没有用户名的触发器的定义:还删除以ALTER TRIGGER开头的行.. *
OracleCommand Command = new OracleCommand(@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + "'),'(CREATE OR REPLACE TRIGGER )("[A-Z]+"\.)(.+)(ALTER TRIGGER .+)','\1\3', 1, 0, 'n')FROM dual", connection))
结果:
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;
答案 0 :(得分:1)
@不会为你逃避所有的逃避。您需要使用'\'转义[A-Z]周围的引号。
同样处理\ 1 \ 3,'\'表示它是一个转义序列,你真正的意思是字面'\'。
E.g:
OracleCommand Command = new OracleCommand(@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + "'),'(CREATE OR REPLACE TRIGGER )(\"[A-Z]+\"\.)(.+)(ALTER TRIGGER .+)','\\1\\3', 1, 0, 'n')FROM dual", conn1))
或者,如果你想使用第二个'@',你需要使用quote-escape-sequence(一个双“”)
e.g:
@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + @"'),'(CREATE OR REPLACE TRIGGER )(""[A-Z]+""\.)(.+)(ALTER TRIGGER .+)','\1\3', 1, 0, 'n')FROM dual"