1

挑战在于存储过程将二进制值组装成 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 位

4

1 回答 1

2

您的代码不起作用的原因是cast(4 as blob(0))它将转换'4'为确实是 0x34 或十进制 52。

为了能够分配二进制值,您需要使用二进制字符串文字(在 Firebird 2.5 中引入):

VAR_BLOB = x'04'

请注意,二进制文字由成对的十六进制数字组成。

于 2016-12-19T10:54:04.130 回答