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 

오류입니다. 0으로

"산술 오버플로 또는 부서 발생한 산술 예외 , 숫자 오버플로 또는 문자열 잘림 문자열로 변환 할 때 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로 테스트를하고 Blob 2.5Mb의 이미지를 테스트했습니다. 두 blob 필드는 부속 유형 "2 진"입니다. Everithing는 괜찮습니다. 대상 BLOB 필드의 하위 유형이 "text"인 경우 오류는 없지만 예상대로 수신 된 이미지가 손상됩니다. –

+0

좋아요. FB를 2.5에서 2.5.5로 업데이트했고 현재 작동 중입니다. 고맙습니다! – skafinski

2

파이어 버드 2.5의 초기 버전의 일부가 가진 문제 :

EXECUTE STATEMENT with Dynamic Parameters

처럼를 참조하십시오. 내가 가진 정확한 문제를 쉽게 식별 할 수는 없지만 새로운 버전으로 업그레이드하면이 문제가 해결됩니다 (주석에서 이미 확인했듯이).

작성 당시 Firebird 2.5.6은 최신 버전이며 곧 2.5.7이 나올 예정입니다.