sql >> Database >  >> RDS >> PostgreSQL

Krijg resultaat van zoekopdracht in DO-satement

Je kan niet retourneert waarden van een DO uitspraak. Maak in plaats daarvan een plpgsql-functie.

Er zijn verschillende manieren om het retourtype te definiëren met de RETURNING clausule of met OUT parameters. Lees de handleiding over CREATE FUNCTION .

Er zijn verschillende manieren om waarden uit de functie te retourneren. Lees het hoofdstuk Terugkeren van een functie in de handleiding.

In het bijzonder, aangezien u hele rijen uit een tabel probeert te retourneren, kunt u het geregistreerde type van de tabel gebruiken voor de functiedeclaratie:

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;

Bel:

SELECT * FROM foo ();

Of probeer een zoekopdracht hier op SO. Ik heb veel gepost gerelateerde codevoorbeelden .

Oplossing voor DO verklaring

Als u een functie niet kunt gebruiken, is de enige verstandige tussenoplossing met een DO-statement het gebruik van een tijdelijke tabel:

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;

Tijdelijke tabellen worden automatisch verwijderd aan het einde van de sessie .



  1. Dia's en voorbeelden van SQL-intersecties

  2. Gewaardeerde parameters voor Postgresql JDBC-tabel

  3. MySQL Server 8.0 externe database

  4. MySQL Meerdere tellingen in één query met hoofdletter