Hier ein Beispiel für ein execute block aus unserer letzten Schulung auf Basis der IBExpert Demo
DB.
Der Block läuft in einer
DB ab und verbindet sich immer innerhalb der Schleife mit der anderen
DB.
Wenn die Daten in der eigentlichen
DB bleiben, wäre das sicherlich performanter und 1GB ist noch lange kein
Grund, da was auszulagern, wir nutzen aber genau das Verfahren für sehr große Mengen von PDFs und Bildern,
da kommen pro Jahr gerne mal 100GB zusammen. Die werden dann immer jahresweise in Archivdatenbanken übertragen
und die sind dann nur noch readonly, brauchen daher auch nicht mehr gesichert werden.
Code:
execute block
returns
(customer_name varchar(200),
total_sales numeric(18,2))
as
declare variable customer_id bigint;
begin
for
select customer.firstname||' '||customer.lastname, customer.id
from customer
into customer_name , customer_id
do
begin
execute statement ('select sum(orders.totalamount) from orders where orders.customer_id=:CUSTOMER_ID')(CUSTOMER_ID:=CUSTOMER_ID)
-- on external '
localhost/3050:d:\fet\db1.fdb' --wennn es ein anderer
FB Server ist, dann so
on external 'd:\fet\db1.fdb' --sonst so, weil schneller, könnte auch der Firebird alias aus der aliases.conf sein
as user 'SYSDBA' password 'masterke'
into total_sales;
suspend;
end
end
Wenn du die zeile mit "as user ... password ... " weglässt, dann werden die Daten deiner aktuellen Connection genommen