在 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;