我有以下UDF
drop function if exists getCurrency$$
create function getCurrency(dt datetime, x decimal(19,4), y decimal(19, 4))
returns decimal(10,4) reads sql data
begin
declare currencyval decimal(10,4);
/* Some conditions */
select case when dt = "2000-12-31" then 0 else round((x/y), 4) into currencyval;
return currencyval;
end$$
有时此UDF会引发数据截断错误。 我可以解决这个问题,但之前我甚至想要一些有关Decimal数据类型和参数中10,4的重要性的信息。
如果你给出边界条件的一些例子,那将是件好事。
答案 0 :(得分:7)
10, 4
表示点前6位(整数部分)和后4(小数部分)。
因此,您可以返回的最大数字是999999.9999
在您的特定情况下,无法说明x
和/或y
的边界值是什么,但您可以检查返回值(currencyval
)是否超出-999999.9999 .. 999999.9999
范围。
顺便说一下,如果您在x
条记录中询问y
和DECIMAL (x, y)
,那么:
x = 1..65
y = 0..30 && y <= x
参考文献: