0

データベースの移行にはScriptellaを使用しています。テーブル A からテーブル B に longblob フィールドをコピーするための最良の方法は何でしょうか?

この仕事を次のように行うと:

<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 のサイズはわずか数キロバイトです)。

4

2 に答える 2

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の場合と同様に、ブロブ/クロブのコンテンツは約40kBです(データベースの観点からは、キー/値のリストがそれぞれ別の行にあり、これはMySQL MEDIUMTEXTです)。ブロブ/クロブを挿入できることはわかっています。ファイルから (mp3 ファイルを使用した scriptella の例)、blob のコンテンツをファイルに書き込むことができるため (odbc を使用した scriptella の例と janino を使用した写真)、一時ファイルを使用したソリューションを使用しようとしますが、美しい解決策ではありません。私は正しいですか?

もっと簡単な解決策はありますか?

よろしく、ジャセク

于 2013-02-13T10:21:03.513 に答える
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 に答える