我正在使用FireDac连接到我的oracle数据库。 要插入blob字段,我使用以下代码:
procedure TForm1.btn1Click(Sender: TObject);
begin
try
fdqry1.Open('select * from Tbl_Image where length(fld_content) > 0');
try
while not fdqry1.Eof do
begin
fdqry2.Close;
fdqry2.SQL.Text:= 'insert into temp_blob (fld_ID, fld_CONTENT) values(:id, EMPTY_BLOB()) ' +
'RETURNING fld_CONTENT INTO :content';
fdqry2.Params[0].AsInteger:= fdqry1.FieldByName('fld_ID').AsInteger;
fdqry2.Params[1].DataType:= ftOraBlob;
fdqry2.Params[1].AsStream:= fdqry1.CreateBlobStream(fdqry1.FieldByName('fld_CONTENT'), bmRead);
con1.StartTransaction;
fdqry2.ExecSQL;
con1.Commit;
fdqry2.CloseStreams;
fdqry1.Next;
end;
finally
fdqry1.Close;
fdqry2.Close;
end;
except on E: Exception do
begin
con1.Rollback;
ShowMessage(E.Message);
end;
end;
end;
此代码没有错误,但无法正常工作。为什么目标字段为空?
答案 0 :(得分:0)
您可以将blob值分配给代码中的输出参数,这样它就不会影响表中fld_content列的值。您必须添加第三个参数。
fdqry2.SQL.Text:= 'insert into temp_blob (fld_ID, fld_CONTENT) values(:id, :blob_val)) ' +
'RETURNING fld_CONTENT INTO :content';
fdqry2.Params[0].AsInteger:= fdqry1.FieldByName('fld_ID').AsInteger;
fdqry2.Params[1].DataType:= ftOraBlob;
fdqry2.Params[1].AsStream:= fdqry1.CreateBlobStream(fdqry1.FieldByName('fld_CONTENT'), bmRead);
fdqry2.Params[2].DataType:= ftOraBlob;