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

¿Existe tal cosa como una función temporal?

No hay CREATE TEMP FUNCTION ... como el CREATE TEMP TABLE ... existente . Pero ahí está el truco para crear una función en el esquema temporal pg_temp , como la respuesta vinculada proporciona . La función solo es visible dentro de la misma sesión y solo se puede llamar mediante un nombre calificado de esquema:

CREATE FUNCTION pg_temp.f_inc(int)
  RETURNS int AS 'SELECT $1 + 1' LANGUAGE sql IMMUTABLE;

SELECT pg_temp.f_inc(42);
f_inc
-----
43

Podría rastrear la idea hasta esta publicación de Tom Lane en pgsql-general .

Lo más parecido sin trucos sería una declaración preparada . Actúa como una función SQL temporal que muere al final de la sesión. No es igual cosa, sin embargo, y solo puede usarse por sí mismo, no en el contexto de una consulta más grande. Ejemplo:

PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;

Llamar:

EXECUTE upd_tbl(123, 'foo_name');

Detalles: