gpt4 book ai didi

python - cx_Oracle 游标忘记聚合时的列比例

转载 作者:行者123 更新时间:2023-12-01 05:43:42 25 4
gpt4 key购买 nike

对于我创建的 Oracle 表 MYTABLE,我有一个列 COL1,它被声明为 NUMBER(20,3);小数点后可以有 3 位有效数字。当我在此表上运行 cx_Oracle 游标时:

cursor.execute('SELECT COL1 FROM MYTABLE')

cursor.description
>> [('COL1', <type 'cx_Oracle.NUMBER'>, 25, 22, 20, 3, 1)]

cursor.execute('SELECT SUM(COL1) FROM MYTABLE')

cursor.description
>> [('SUM(COL1)', <type 'cx_Oracle.NUMBER'>, 127, 22, 0, 0, 1)]

在第二种情况下,我失去了精度和规模。数据本身很好(并显示带有小数位的值)。

我确实需要一种可靠的方法来告诉这两种情况需要什么数据类型(这样我就可以决定如何在客户端 UI 等上格式化我的数据。)查看光标描述,您会相信后面没有有效的数字在第二种情况下允许使用小数点,并且我下游的 UI 逻辑将数字呈现为整数,这是不可取的。

这是一个错误吗?如果是,有什么方法可以在第二种情况下从光标中明确地找出我可以期望的数据类型吗?

最佳答案

我认为您在这里看到的是 Oracle 在将函数应用于精度和小数位数受限的数字时避免 ORA-01438 错误的内置努力。默认情况下,您不希望在表达式 (COL1/COL2) 或 AVG(COL1) 中应用 COL1 和 COL2 的精度和小数位数。

因此,Oracle 应用通用的 NUMBER 数据类型,对精度和小数位数没有限制。我相信它的功能与 VarChar2 函数类似。

可能值得尝试的是显式转换 Sum() 结果:

Cast(Sum(col1) as Number(22,3))

如果结果的精度超过 22,您会得到:

ORA-01438: value larger than specified precision allowed for this column

最后,如果您不知道,超过比例不会引发错误 - 如果超过指定的比例,数字只会四舍五入到可能的最大比例。

关于python - cx_Oracle 游标忘记聚合时的列比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16801863/

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