PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzo del parametro come nome della colonna nella funzione Postgres

Non è possibile utilizzare parametri come identificatori (=nome colonna), per questo è necessario un SQL dinamico. E ciò richiede PL/pgSQL:

CREATE OR REPLACE FUNCTION day_entries(p_id int, p_column text) 
  RETURNS BIGINT[] 
AS
$$
declare 
  l_result bigint[];
begin
  execute format('SELECT %I FROM days WHERE id = $1', p_column) 
     using p_id
     into l_result;
  return l_result;
end;     
$$
LANGUAGE plpgsql;

format() gestisce correttamente gli identificatori durante la creazione di SQL dinamico. Il $1 è un segnaposto di parametro e il relativo valore viene passato con using p_id clausola del execute dichiarazione.