batch insert

1 отговора 83 прегледа
#1

batch insert

Колеги, кажете как правите запис в базата на много редове ( >500000). Базата е Firebird. Аз го правя по следния начин:

procedure TForm1.Button5Click(Sender: TObject);
var
Filename : String;
RawOutput : TIBOutputRawFile;
RawInput : TIBInputRawFile;
begin
IBQuery3.Sql.Text := 'Select ID, NAME from Imena';
IBQuery4.Sql.Text := 'Insert into Imena (ID, NAME) values(:id, :name)';
Filename := 'c:\DataFile.RAW';
RawOutput:= TIBOutputRawFile.Create;
try
RawOutput.FileName := FileName;
IBDatabase3.Open;
IBQuery3.Transaction.Active := true;
IBQuery3.BatchOutput(RawOutput);
finally
RawOutput.Free;
end;

RawInput := TIBInputRawFile.Create;
try
RawInput.FileName := FileName;
IBDatabase4.Open;
IBQuery4.Transaction.Active := true;
IBQuery4.BatchInput(RawInput);
finally
RawInput.Free;
end;
IBQuery4.Transaction.CommitRetaining;
end;

Всичко работи перфектно, скороста е много добра. Работя съответно с IB компонентите. Тук идва обаче проблема как да чета данните от друга база, например Oracle и да ги импортирам в Firebird. С IB компонентите не мога да се вържа към друг вид база, а TQuery няма BatchOutput. Та за това питам вие как правите запис на много редове в базата. Мерси предварително.

Отговор
в отговор на dani #2

Re: batch insert

ами ...като първа идея
правиш в oracle една databaselink към другата база данни.
и после евентуално тригер или процедура... за каквото трябва

хм, я погледни и
тук

Редактирано от Aйeз Ceдaй на

Отговор