sql >> Database >  >> RDS >> PostgreSQL

Parameter gebruiken als kolomnaam in Postgres-functie

Je kunt geen parameters gebruiken als identifiers (=kolomnaam), daar heb je dynamische SQL voor nodig. En dat vereist 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() gaat op de juiste manier om met id's bij het bouwen van dynamische SQL. De $1 is een tijdelijke aanduiding voor een parameter en de waarde daarvoor wordt doorgegeven met de using p_id clausule van de execute verklaring.




  1. SQL Server 2016:OLTP-verbeteringen in het geheugen

  2. Hoe POSITION() werkt in PostgreSQL

  3. Het optimaliseren van een SELECT-query die langzaam draait op Oracle die snel draait op SQL Server

  4. Installatiefout Oracle-client - pad te lang