에 문을 실행 :파이어 버드의의가 나는이 같은 코드가 있다고 가정 해 봅시다 BIGINT 이름 입력 매개 변수
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
이 사람은 좋은 arithmetic exception, numeric overflow, or string truncation. numeric value is out of range.
제공합니다.
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
아무도 이유를 알고 있나요 :
그것이 내가 변수의 명시 적 캐스팅을 할 필요가 작동하게하려면? 타입 정보가 있어야합니다, 안 그래요?
파이어 버드는 바운드 변수의 유형이 아니라 [쿼리 자체 구조] (http://www.firebirdsql.org/refdocs/langrefupd25-sqlnull.html#langrefupd25-sqlnull-rationale)의 매개 변수 유형을 유추합니다 주변 언어의 변수에 대한 이해도 (동일한 것에 해당하는 것은 아닐 수도 있습니다). 일부는 이것을 엔진의 한계라고 생각합니다 (http://stackoverflow.com/a/11451797/132382). – pilcrow
담근. 나는 사실 내 질문에 대답했다. :) –
하. 나는 "기억 상실증"뱃지를 몇 번이나 받았습니다. – pilcrow