sql >> Databáze >  >> RDS >> PostgreSQL

Získejte výsledek z dotazu v satementu DO

Nemůžete vrátí hodnoty z DO tvrzení. Místo toho vytvořte funkci plpgsql.

Existuje několik způsobů, jak definovat návratový typ pomocí RETURNING klauzule nebo s OUT parametry. Přečtěte si příručku o CREATE FUNCTION .

Existuje několik způsobů, jak vrátit hodnoty z funkce. Přečtěte si kapitolu Návrat z funkce v návodu.

Zejména, protože se pokoušíte vrátit celé řádky z tabulky, můžete pro deklaraci funkce použít registrovaný typ tabulky:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Volejte:

SELECT * FROM foo ();

Nebo zkuste hledat zde na SO. Odeslal jsem mnoho související příklady kódu .

Řešení pro DO prohlášení

Pokud nemůžete použít funkci, jediné z poloviny rozumné řešení s příkazem DO je použití dočasné tabulky:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Dočasné stoly jsou na konci relace automaticky zrušeny .



  1. Java MySQL - připojení Named Pipe vyvolá varování při zavření

  2. Oracle - NÁVRAT v kombinaci s agregačními funkcemi

  3. Záludný příkaz SQL přes 3 tabulky

  4. Víceúrovňové menu s PHP/MySQL