2017-02-09 8 views
1

BLOBをあるデータベースから別のデータベースに挿入/更新しようとしています。 FirebirdにはEXECUTE STATEMENT (on external database)が含まれています。しかし、BLOBを外部データベースにイン/アップしようとするとうまくいきません。INSERT/UPDATE外部データベースのBLOB

EXECUTE STATEMENTやその他の提案で実行できるかどうかは誰にも分かりませんか?

UPDATE 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切り捨て:長さの制限を超えました。

+0

ブロブの内容はどれくらいですか?試したコードとエラーがあればそれを含めることができますか? –

+0

@MarkRotteveel私の質問が更新されました。 – skafinski

+0

両方のデータベースの 'filecontent'はblobですか? –

答えて

2

代わりにパラメータを使用してください。 VARCHAR(30)を持って取り扱う場合の塊、例えば、塊と

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

同じ問題。文字列に変換するときのBlobの切り捨て:長さの制限を超えました – skafinski

+0

Firebird 2.5.5でテストし、2.5 MBの画像をテストしました。両方のBLOBフィールドはサブタイプ "バイナリ"です。 Everithingは大丈夫です。宛先BLOBフィールドがサブタイプ「テキスト」である場合、エラーはないが、期待されるように、受信した画像は壊れている。 –

+0

Ok FBを2.5から2.5.5にアップデートしました。ありがとうございました! – skafinski

2

Firebirdの2.5の初期のバージョンのいくつかは持っていた問題:

EXECUTE STATEMENT with Dynamic Parameters

のように参照してください。正確な問題を簡単に特定することはできませんが、新しいバージョンにアップグレードするとこの問題が解決するはずです(コメントで既に確認済み)。

執筆時点では、Firebird 2.5.6が最新バージョンであり、近いうちに2.5.7がリリースされる予定です。

関連する問題