gpt4 book ai didi

带有 bigint 命名输入参数的 Firebird 的执行语句

转载 作者:行者123 更新时间:2023-12-04 02:37:41 25 4
gpt4 key购买 nike

假设我有这样的代码:

execute block
as
declare var_mask bigint;
declare var_dummy int;
begin
var_mask = bin_shl(1, (64 - 1));

execute statement ('
select first 1 null
from rdb$database
where bin_and(cast(0 as bigint), :var_mask) <> cast(0 as bigint)
')
(var_mask := var_mask)
into :var_dummy
;
end

这个给出了很好的算术异常、数字溢出或字符串截断。
数值超出范围。

为了让它工作,我必须对变量进行显式转换:

execute block
as
declare var_mask bigint;
declare var_dummy int;
begin
var_mask = bin_shl(1, (64 - 1));

execute statement ('
select first 1 null
from rdb$database
where bin_and(cast(0 as bigint), cast(:var_mask as bigint)) <> cast(0 as bigint)
')
(var_mask := var_mask)
into :var_dummy
;
end

有人知道为什么吗?应该携带类型信息,不是吗?

最佳答案

因为 BIN_AND 将第二个参数描述为 INTEGER,即使您将 BIGINT 传递给第一个参数也是如此。这是好是坏有待讨论。

关于带有 bigint 命名输入参数的 Firebird 的执行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551865/

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