Ahoj,
zkusil jsem nahradit dočasnou tabulku pomocí view abych odstranil problém s vícenásobným otevřením dočasné tabulky v příkazech obsahujících union. Celé to funguje a je to rychlejší. Pokud jsem správně pochopil, view se chová podobně jako stálá tabulka - tím vzniká problém při současné práci více klientů.
create or replace view vz as (select greatest(cas, '2014-04-11 11:20:30') as cas,
'zp' as u from leva_udalosti where udalost = 'pozn' and popis = 'poznamka')
union all (select greatest(cas, '2014-04-11 11:20:30') as cas,
'zn' as u from leva_udalosti where udalost = 'nazev' and popis = 'mereni');
select ta.cas, 'kp' as u from leva_udalosti ta join vz on
ta.udalost = 'pozn' and ta.cas > vz.cas group by vz.cas having min(ta.cas)
union all
select ta.cas, 'kn' as u from leva_udalosti ta join vz on
ta.udalost = 'nazev' and ta.cas > vz.cas group by vz.cas having min(ta.cas)
union all
select cas, u from vz order by cas;
výše uvedenou sekvenci příkazů potřebuji provést zaráz tak aby jiný klient nemohl změnit obsah wiew (musel počkat až právě pracující klient dokončil práci). Chtěl jsem použít transakci, ale v dokumentaci jsem narazil na informaci, že create view patří mezi příkazy, které provedou commit implicitně. Jak situaci vyřešit?
Použití dvou dočasných tabulek je citelně (asi 6x) pomalejší :(
hu