Názor k článku Jak nepoužívat PL/pgSQL (případně PL/SQL) – fatální chyby při vývoji od Pavel Stěhule - Přišlo mi to jasné, ale uvedu příklad. CREATE TEMP...

  • Článek je starý, nové názory již nelze přidávat.
  • 25. 5. 2018 17:16

    Pavel Stěhule

    Přišlo mi to jasné, ale uvedu příklad.

    CREATE TEMP TABLE xx AS SELECT id FROM tab WHERE ...
    FOR r IN SELECT ... FROM t WHERE id IN (SELECT id FROM xx)
    
    --- lepe
    
    DECLARE xx int[];
    SELECT array_agg(id) INTO xx FROM tab WHERE ...
    FOR r IN SELECT ... FROM t WHERE id = ANY(xx)

    Důvodů, proč se používá dočasná tabulka může být vícero - někdy se používá pro předávání např. seznamu id mezi procedurami. V takovém případě se právě perfektně uplatní pole.

    CREATE OR REPLACE FUNCTION zrus_xx(ids int[])
    RETURNS void AS $$
    BEGIN
      DELETE FROM tab WHERE id = ANY(ids)
      ..