在脚本中复制 blob 字段



我正在使用Scriptella进行数据库迁移。将长blob字段从表A复制到表B的最佳方法是什么?

当我像这样做这项工作时:

<query ...
  SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
  <script ...>
    INSERT B (FL_DATA) VALUES ('$data');
  </script>
</query>

然后它只会将"BLOB:java.io.IOException:内容太长而无法放入内存"写入目标字段(顺便说一句:longblob的大小只有几千字节)。

使用$variable语法时,变量的文本值只需插入到语句的文本中。建议的方法是使用预准备语句语法。在这种情况下,值将与 SQL 语句分开传输。 请尝试以下操作:

<query ...
  SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
  <script ...>
    INSERT B (FL_DATA) VALUES (?data);
  </script>
</query>

抱歉,这不是答案,但我不知道如何评论 ejboy 的答案。

Ejboy,这对我不起作用。我已经尝试使用(在我的情况下)?描述和?2准备好的语句。当我尝试在控制台上显示内容时,我遇到的错误与我相同:

<query connection-id="database">
    SELECT id, description FROM table;
    <script connection-id="copy_database">
        INSERT INTO table VALUES (?1, ?2);
    </script>
    <script connection-id="text">
      $id, $description
    </script>
</query>

我在显示和插入时都遇到了相同的错误(这里是显示示例):

BRA0735401, CLOB: java.io.IOException: Content too long to fit in memory

我的主要任务是将副本从一个数据库复制到另一个数据库。就像在Jan的情况下,blob/clob内容约为40 kB(键/值列表,每个在单独的行中,从数据库的角度来看,这是MySQL MEDIUMTEXT)。我知道,可以从文件中插入 blob/clob(带有 mp3 文件的脚本示例),并且可以将 blob 的内容写入文件(使用 odbc 的脚本示例和带有 janino 的图片),所以我将尝试使用带有临时文件的解决方案,但这不是一个漂亮的解决方案。我说的对吗?

有没有更简单的解决方案?

问候雅切克

最新更新