gpt4 book ai didi

sql - 将数值转换为 VARCHAR2 会引发 ORA-03113

转载 作者:行者123 更新时间:2023-12-04 10:59:57 25 4
gpt4 key购买 nike

当我们针对 Oracle 12c Enterprise Edition Release 12.2.0.1.0 运行语句时,该版本包含将数值转换为 VARCHAR2(4000 char),我们在通信 channel 上收到 ORA-03113 文件结尾。

各种资源——比如https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9527821800346583868描述,这可能是由错误的数据库配置引起的。提到的资源 (asktom.oracle.com) 有一个共同点 - 他们提到了我们遇到错误的相同边界 1002/1003。但是,我无法找到导致这种行为的特定配置/解释 - 尤其是 1002/1003 边界。让我展示一个示例查询:

这有效:

select cast(numerical_value as varchar2(1002 char)) 
from my_table;

这失败了 ORA-03113:
select cast(numerical_value as varchar2(1003 char)) 
from my_table;

有没有人观察过这种行为,或者可以告诉我,哪个数据库设置可能会导致这种情况?

最佳答案

这个答案是对问题的框架挑战。

来自 Oracle Datatype limits :

NUMBER [ (p [, s]) ] Number having precision p and scale s. The precision p can range from 1 to 38. The scale s can range from -84 to 127. Both precision and scale are in decimal digits. A NUMBER value requires from 1 to 22 bytes.



因此,如果您将值格式化为字符串,则它的最大值为:
-999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

这是 127 个字符,或者如果您考虑最大的负指数,则

-.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999999999999999999999999999

其长度为 169 个字符(如果有前导零则为 170 个)。

db<>fiddle

无需将存储在表中的数值转换为大于此大小的任何值,因此您可以使用:

CAST(value AS VARCHAR2(200 CHAR))

它应该不仅仅是处理存储在 NUMBER 中的所有值柱子。

关于sql - 将数值转换为 VARCHAR2 会引发 ORA-03113,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58876378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com