挑战在于存储过程将二进制值组合到blob然后保存表。问题是存储过程使用blob作为文本,例如,如果我想插入blob字节4,则插入字节52(对于字节ASCII编号4)。
我尝试了不同的演员,但没有任何作用。如果存储过程更新blob到表中,这是函数的参数,那么它可以正常工作。
如何在存储过程中使用二进制值(完整字节)?
CREATE PROCEDURE PROC__TESTBLOB (
INID Integer,
INDATABLOB Blob sub_type 0 )
RETURNS (
RESULT Varchar(20) )
AS
DECLARE VARIABLE VAR_BLOB blob sub_type 0;
BEGIN
BEGIN
BEGIN
--update tab_test set datablob = :INDATABLOB where id = :INID; --This work fine
VAR_BLOB = CAST(4 AS BLOB(0));--not work, blob is still byte 52 (ascii number 4)
VAR_BLOB = 3;--not work, blob is still byte 51 (ascii number 3)
update tab_test set datablob = :VAR_BLOB where id = :INID;--This does not work
RESULT = 'OK';
END
WHEN ANY DO RESULT = 'ERR';
END
SUSPEND;
END^
更新 Firebird版本3.0.0.32483 64位
答案 0 :(得分:2)
您的代码无法正常工作的原因是,cast(4 as blob(0))
将转换为'4'
,确实是0x34或小数52.
为了能够分配二进制值,您需要使用binary string literals(在Firebird 2.5中引入):
VAR_BLOB = x'04'
请注意,二进制文字由十六进制数字对组成。