Regex Oracle declare select into update语句不起作用
我向它们发送消息,然后通过从DECLINEREASON t获取Regex Oracle declare select into update语句不起作用,regex,oracle,select-into,regexp-replace,Regex,Oracle,Select Into,Regexp Replace,我向它们发送消息,然后通过从DECLINEREASON t获取选择ascii(substr(declinereasondesc,30,1)) 其中declinereasonid=7我在db字符集中得到了的代码(49827)。然后我尝试更新数据库中的记录 我遇到的问题是数据没有保存到DB或选择进入值到varchar2(6)以某种方式更改了它,但它不再匹配REGEXP\u REPLACE 当我尝试使用varchar2(1)时,它确实出现了错误,这可能是一个提示 declare c varchar2(
选择ascii(substr(declinereasondesc,30,1))
其中declinereasonid=7代码>我在db字符集中得到了
的代码(49827)。然后我尝试更新数据库中的记录
我遇到的问题是数据没有保存到DB或选择进入值到varchar2(6)
以某种方式更改了它,但它不再匹配REGEXP\u REPLACE
当我尝试使用varchar2(1)
时,它确实出现了错误,这可能是一个提示
declare c varchar2(6);
begin
select ascii(substr(declinereasondesc, 30,1)) into c from DECLINEREASON t
where declinereasonid = 7;
begin
update DECLINEREASON set declinereasondesc = REGEXP_REPLACE(declinereasondesc, '(.+)('||c||')(\d+)', '\1\3 (GBP)');
commit;
end;
end;
/
commit;
更新:尝试声明c编号代码>没有错误,但没有更新值。这是因为我太笨了-忘记在chr(c)
中包装c
在update
语句中没有where
子句@ammoQ不需要它,不匹配的regex_replace返回它的输入值。但这仍然意味着update语句仍然影响DECLINEREASON
中的所有行,这可能会导致不必要的副作用(性能损失、触发器触发、锁定…),即使更新本身没有effect@ammoQ你完全正确
declare c number;
begin
select ascii(substr(declinereasondesc, 30,1)) into c from DECLINEREASON t
where declinereasonid = 7;
begin
update DECLINEREASON set declinereasondesc = REGEXP_REPLACE(declinereasondesc, '(.+)('||chr(c)||')(\d+)', '\1\3 (GBP)');
commit;
end;
end;
/
commit;