PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Existe tal coisa como uma função temporária?


Não há CREATE TEMP FUNCTION ... como o CREATE TEMP TABLE ... existente . Mas existe o truque para criar uma função no esquema temporário pg_temp , como a resposta vinculada . A função só é visível na mesma sessão e só pode ser chamada pelo nome qualificado pelo 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

Eu poderia rastrear a ideia para esta postagem de Tom Lane em pgsql-geral .

A coisa mais próxima sem truques seria uma declaração preparada . Funciona como uma função SQL temporária que morre no final da sessão. Não é o mesmo coisa, porém, e só pode ser usado por si só, não no contexto de uma consulta maior. Exemplo:
PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;

Ligar:
EXECUTE upd_tbl(123, 'foo_name');

Detalhes: