我有以下查询:
SELECT (CAST("META_SECT_ORDER" AS NVARCHAR2(3)) || '#' || "CODE") AS "SECTION"
FROM "BMAN_TP2"."LOADER_TEMPLATE_SECTIONS"
META_SECT_ORDER
显然是整数,而CODE
是字符串。
它输出700行,如下所示:
SECTION
-------
0#F01
0#I05
1#I05
2#I05
等...
我知道CAST
不是必需的,但查询由底层查询构建器组成,该构建器也为MsSQL Server(需要CAST
)和Postgres输出。
奇怪的是,如果我提高NVARCHAR2
长度,我会获得不同的结果。例如:
值<= 80,我得到了正确的结果(见上文)
的值为81,我获得了700行쥴ឋ醴ఀ퉶凨쓥昁菄ࢋ䖼譕貉ႋ䖼莀鐋
值为82,我得到700行ਖଆ
奇数值,在[83-127]中,我得到700个空行
偶数值,在[84-128]中,我得到700行ڢ
值为&gt; = 129,我得到ORA-03113: end-of-file on communication channel
那是什么??
编辑:
实际上,它似乎只取决于CAST
,连接是不相关的。
答案 0 :(得分:2)
这看起来像“Bug 9949330 - ORA-7445或将数字转换为NVARCHAR2的乱码数据”。您已经发现了正式的解决方法,使用值&lt; = 80。
您应该联系支持部门下载补丁程序或为您的平台请求补丁程序。
这是一种在不使用任何数据的情况下重现问题的简便方法。截至11.2.0.3,它仍然失败。
SQL> select cast(level as nvarchar2(130)) from dual connect by level <= 1;
CAST(LEVELASNVARCHAR2(130))
--------------------------------------------------------------------------------
ååååååååå┐┐┐ ┐┐ ┐┐A ┐┐ ┐┐A ┐┐ A ┐┐ ┐ ┐┐ ┐┐A