sql >> Database >  >> RDS >> PostgreSQL

Postgres-functie die tabel retourneert en geen gegevens in kolommen retourneert

Om individuele kolommen te krijgen in plaats van het rijtype, roept u de functie aan met:

SELECT * FROM testfunction();

Net zoals je alle kolommen uit een tabel zou selecteren.
Overweeg ook deze herziene vorm van je testfunctie:

CREATE OR REPLACE FUNCTION testfunction()
  RETURNS TABLE(a int, b int)
  LANGUAGE plpgsql AS
$func$
DECLARE
   _a int := 0;
   _b int := 0;
BEGIN
   CREATE TABLE tempTable AS SELECT _a, _b;
   RETURN QUERY SELECT * FROM tempTable;
   DROP TABLE tempTable;
END
$func$;

In het bijzonder:

De DECLARE sleutelwoord is maar één keer nodig.

Vermijd het declareren van parameters die al (impliciet) zijn gedeclareerd als OUT parameters in de RETURNS TABLE (...) clausule.

Gebruik geen CaMeL-case-ID's zonder aanhalingstekens in Postgres. Het werkt, ID's zonder aanhalingstekens worden omgezet in kleine letters, maar het kan tot verwarrende fouten leiden. Zie:

  • Zijn PostgreSQL-kolomnamen hoofdlettergevoelig?

De tijdelijke tabel in het voorbeeld is volledig nutteloos (waarschijnlijk te vereenvoudigd). Het gegeven voorbeeld komt neer op:

CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
  LANGUAGE plpgsql AS
$func$
BEGIN
   a := 0;
   b := 0;
END
$func$;


  1. Een gegevensmodel voor kinderfeestjes

  2. SQLite Database geeft waarschuwing automatische index op <table_name>(kolom) Na het upgraden van Android L

  3. Hoe een IF-statement in SQL uit te voeren?

  4. MySQL-trigger om een ​​veld bij te werken naar de waarde van id