当我不得不将Oracle连接器从11g更改为12c时,查询就不再起作用了:从表中选择getunicodetransl(列)。在11g中,它没有出错,但在12c版本中,它给出了错误"ORA-00904:“GETUNICODETRANSL:无效标识符”。
我如何替换这个函数,这样我就可以得到相同的结果了?例如,这个函数将值“!9LQND6”转换为"33369LQND6",这意味着它将!替换为值33,$E 211替换为值E 11236E 213,这与UTF8等效。
我尝试过多种方法来替换这个函数,但是我无法得到相同的结果。在我看来,最正确的选项是“从表选择转换(列,'utf8')”,但结果仍然是"!$9LQND6“。
谢谢!
发布于 2020-07-29 11:25:54
Oracle中没有这样的功能。有人在你的11g数据库中创建了这个函数。获取代码并将其部署到您的12c中。
发布于 2020-07-29 11:33:15
“!$9 LQND6”是 UTF8。
UTF8指的是100多万个字符。因此,可以肯定地说,几乎所有您知道的特殊字符都包含在UTF8中。因此,“!$9 9LQND6 6”将永远保持在UTF8中
您要寻找的编码功能不是标准转换。还请注意,当您将"!$9LQND6“转换为"33369LQND6”时,不能将其转换回它的原始值。当你得到3336你不知道这些是数字还是一些特殊字符的ascii代码.
您能得到的最接近的功能是浏览所有字符的函数:
Declare
Char_ varchar2(10);
Output varchar2(1000);
begin
for i in 1..length(Text)
loop
Char_ := substr(Text,i,1);
if upper(Char_) not in ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z') then
Output := Output || ascii(Char_);
else
Output := Output|| Char_;
end if;
end loop
return Output;
end;https://stackoverflow.com/questions/63151012
复制相似问题