【问题标题】:INSERT/UPDATE Blob on external database在外部数据库上插入/更新 Blob
【发布时间】:2017-02-09 10:48:17
【问题描述】:

我正在尝试将 blob 从一个数据库插入/更新到另一个数据库。我知道 Firebird 包含 EXECUTE STATEMENT (on external database)。但是,如果您尝试将 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 截断:超出长度限制。”

【问题讨论】:

  • blob 的内容有多大?您能否还包括您尝试过的代码以及您遇到的任何错误(如果有)?
  • @MarkRotteveel 我更新了我的问题。
  • 两个数据库中的 filecontent 是一个 blob 吗?
  • @MarkRotteveel 是的,标记它。
  • 您使用的是哪个 Firebird 2.5 版本?

标签: blob firebird firebird2.5


【解决方案1】:

改用参数。

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';

【讨论】:

  • 同样的问题。转换为字符串时 Blob 截断:超出长度限制
  • 我使用 Firebird 2.5.5 和 blob 2.5 Mb 中的图像进行了测试。两个 blob 字段都是“二进制”子类型。一切正常。当目标 blob 字段的子类型为“文本”时,没有错误,但正如预期的那样,接收到的图像已损坏。
  • 好的,我将 FB 从 2.5 更新到 2.5.5,现在运行良好。谢谢!
【解决方案2】:

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

在撰写本文时,Firebird 2.5.6 是最新版本,预计将很快推出 2.5.7。

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2013-09-15
    相关资源
    最近更新 更多