PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Übergeben Sie WHERE-Parameter an die PostgreSQL-Ansicht?

Sie könnten eine Satzrückgabefunktion verwenden:

create or replace function label_params(parm1 text, parm2 text)
  returns table (param_label text, param_graphics_label text)
as
$body$
  select ...
  WHERE region_label = $1 
     AND model_id = (SELECT model_id FROM models WHERE model_label = $2)
  ....
$body$
language sql;

Dann können Sie Folgendes tun:

select *
from label_params('foo', 'bar')

Übrigens:bist du sicher, dass du willst:

AND model_id = (SELECT model_id FROM models WHERE model_label = $2)

wenn model_label nicht eindeutig ist (oder der Primärschlüssel), wird dies schließlich einen Fehler auslösen. Wahrscheinlich möchten Sie:

AND model_id IN (SELECT model_id FROM models WHERE model_label = $2)