在 Oracle SQL 12c 中将 Unicode 字符转换为 UTF8(十进制)- 不使用 Convert 函数
Convert Unicode characters to UTF8 (decimal) in Oracle SQL 12c - not working with Convert function
我有一个案例,当我必须将 Oracle 连接器从 11g 更改为 12c 并且以下查询不再工作时:select getunicodetransl(column) from table。在 11g 中它可以正常工作,但在 12c 版本中它给出错误“ORA-00904:“GETUNICODETRANSL”:无效标识符”。
如何替换这个函数,才能得到相同的结果?例如,此函数将值“!$9LQND6”转换为“33369LQND6”,这意味着它替换了 ! 的值为 33 和 $ 的值为 36,相当于 UTF8。
我已经尝试了多种替换此功能的方法,但都无法得到相同的结果。从我的角度来看,最正确的选项是“select convert(column,'utf8') from table”,但结果仍然是“ !$9LQND6".
谢谢!
Oracle中没有这个函数。有人在您的 11g 数据库中创建了该函数。获取代码并将其部署到您的 12c
"!$9LQND6" IS UTF8.
UTF8指的是超过100万个字符。所以可以肯定地说,几乎所有您知道的特殊字符都包含在 UTF8 中。因此 "!$9LQND6" 将始终保持在 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;
我有一个案例,当我必须将 Oracle 连接器从 11g 更改为 12c 并且以下查询不再工作时:select getunicodetransl(column) from table。在 11g 中它可以正常工作,但在 12c 版本中它给出错误“ORA-00904:“GETUNICODETRANSL”:无效标识符”。
如何替换这个函数,才能得到相同的结果?例如,此函数将值“!$9LQND6”转换为“33369LQND6”,这意味着它替换了 ! 的值为 33 和 $ 的值为 36,相当于 UTF8。
我已经尝试了多种替换此功能的方法,但都无法得到相同的结果。从我的角度来看,最正确的选项是“select convert(column,'utf8') from table”,但结果仍然是“ !$9LQND6".
谢谢!
Oracle中没有这个函数。有人在您的 11g 数据库中创建了该函数。获取代码并将其部署到您的 12c
"!$9LQND6" IS UTF8.
UTF8指的是超过100万个字符。所以可以肯定地说,几乎所有您知道的特殊字符都包含在 UTF8 中。因此 "!$9LQND6" 将始终保持在 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;