0

我正在使用Scriptella进行数据库迁移。将 longblob 字段从表 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: Content too long to fit in memory”写入目标字段(顺便说一句:longblob 的大小只有几 kBytes)。

4

2 回答 2

0

当使用 $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>
于 2013-01-30T09:06:28.127 回答
0

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

Ejboy,它对我不起作用。我已经尝试使用(在我的情况下)?description 和?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文件的scriptella示例),并且可以将blob的内容写入文件(带有odbc的scriptella示例和带有janino的图片),所以我将尝试使用带有临时文件的解决方案,但它是不是一个漂亮的解决方案。我对吗?

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

问候, 雅克

于 2013-02-13T10:21:03.513 回答