INSERT/UPDATE 外部数据库上的 Blob

INSERT/UPDATE Blob on external database

我正在尝试 Insert/Update 从一个数据库到另一个数据库。我知道 Firebird 包含 EXECUTE STATEMENT (on external database)。但如果你试图 ins/upd blob 到外部数据库,它就不起作用了。

有人知道是否可以使用 EXECUTE STATEMENT 或任何其他建议来完成吗?

更新 1

文件大小约为 0,1MB

CREATE OR ALTER TRIGGER WSATTACHMENT_AI0 FOR WSATTACHMENT
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  EXECUTE STATEMENT('INSERT INTO wsattachment(id, filecontent) VALUES(' || NEW.id || ',' || NEW.filecontent || ')')
  on external 'myDB.FDB'
  as user 'SYSDBA' password 'pw';
END

我遇到的错误:

"发生算术溢出或被零除。 算术异常、数值溢出或字符串截断。 转换为字符串时出现 blob 截断:超出长度限制。"

改用参数。

参见 EXECUTE STATEMENT with Dynamic Parameters

赞:

EXECUTE STATEMENT('INSERT INTO wsattachment(id, filecontent) VALUES(:p1, :p2)')
(p1 := new.id, p2 := new.filecontent)
  on external 'myDB.FDB'
  as user 'SYSDBA' password 'pw';

Firebird 2.5 的一些早期版本存在 blob 问题,例如在某些情况下处理的 blob 有 VARCHAR(30)。我无法轻易确定你遇到的确切问题,但升级到更新版本应该可以解决这个问题(正如你已经在评论中确认的那样)。

在撰写本文时,Firebird 2.5.6 是最新版本,预计很快会发布 2.5.7。