sql >> Base de Datos >  >> RDS >> PostgreSQL

Función de Postgres que devuelve la tabla que no devuelve datos en columnas

Para obtener columnas individuales en lugar del tipo de fila, llame a la función con:

SELECT * FROM testfunction();

Al igual que seleccionaría todas las columnas de una tabla.
También considere esta forma revisada de su función de prueba:

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$;

En particular:

El DECLARE la palabra clave solo se necesita una vez.

Evite declarar parámetros que ya están (implícitamente) declarados como OUT parámetros en la RETURNS TABLE (...) cláusula.

No utilice identificadores de casos CaMeL sin comillas en Postgres. Funciona, los identificadores sin comillas se escriben en minúsculas, pero puede generar errores confusos. Ver:

  • ¿Los nombres de las columnas de PostgreSQL distinguen entre mayúsculas y minúsculas?

La tabla temporal en el ejemplo es completamente inútil (probablemente simplificada en exceso). El ejemplo dado se reduce a:

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