sql >> Databáze >  >> RDS >> PostgreSQL

Použití parametru jako názvu sloupce ve funkci Postgres

Parametry nelze použít jako identifikátory (=název sloupce), k tomu potřebujete dynamické SQL. A to vyžaduje 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() správně pracuje s identifikátory při vytváření dynamického SQL. $1 je zástupný symbol parametru a jeho hodnota se předává s using p_id klauzule execute prohlášení.




  1. Jak vypsat seznam zastaralých funkcí v instanci SQL Server pomocí T-SQL

  2. Cloud Vendor Deep-Dive:PostgreSQL na AWS Aurora

  3. Úpravy dat pod položkou Read Committed Snapshot Isolation

  4. Jak zkontrolujete, zda je IDENTITY_INSERT na serveru SQL nastaveno na ON nebo OFF?