Ich habe versucht, eine Select-Abfrage mit einer temporären Tabelle zu optimieren (ich bin mehr an SQL Server gewöhnt, also gibt es vielleicht einen besseren Weg).Ausführen mehrerer Anweisungen mithilfe von Temp-Tabelle in einem einzigen Skript
Die Abfrage ist im Grunde das (etwas vereinfacht): Tabelle erstellen, ausfüllen, verwenden, Tabelle löschen.
create global temporary table trucks (
nb_trucks int,
warehouse int
)
on commit preserve rows
;
insert into trucks (
nb_trucks, warehouse
)
select
sum(pla.NB_TRUCKS)
,pla.id_site
from ASI_MAS_PLA_PLANIFICATION pla
group by
pla.id_site
;
select distinct
op.operation_id as OPERATION_CODE,
pla.id_site as WAREHOUSE_ID,
(
select
coalesce(sum(nb_trucks), 0)
from trucks
where
and trucks.warehouse = pla.id_site
) as NB_TRUCKS,
from ASI_MAS_PLA_PLANIFICATION pla
inner join ASI_MAS_PLA_CL_PLANIF_OP op
on op.planif_operation_id = pla.z_planif_operation_id
where
pla.z_remainder = 0
group by
op.operation_id
,pla.id_site
order by
op.operation_id
;
truncate table trucks;
drop table trucks;
Aus verschiedenen technischen Gründen muss ich diese Aktionen in einem einzigen Skript auszuführen (eigentlich muss ich den „select“ Teil nur ausführen, sondern eine temporäre Tabelle nicht verwenden sendet die Ausführungszeit durch das Dach).
Ich habe das Skript in einem begin ... end;
Block platziert, aber es mag nicht, dass ich eine Tabelle als erste Anweisung "erstellen".
As I saw here, Ich versuche derzeit, jede Aussage mit einem "execute sofort" like this zu wickeln, aber ich bin nicht sehr gern diese Lösung.
Wie kann ich mehrere Anweisungen, einschließlich einer "create", in einem einzigen SQL-Skript ausführen?
Ich habe versucht, einen gemeinsamen Tabellenausdruck, aber die Ausführungszeit ist sehr lang. – thomasb
Ich habe meine Antwort bearbeitet ... hoffe, es hilft. – StefanG