PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Предаване на таблицата като параметър

КАКТО спомена @dezso, в този случай ще ви трябва динамичен SQL.

Динамичен SQL с EXECUTE

И така, вие сте на прав път; формиране на динамичен SQL израз с помощта на PL/pgSQL, но ви трябват само последните щрихи:

CREATE or REPLACE FUNCTION convert_from_lon_lat(long float, lat float, _table text) 
RETURNS integer AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT id FROM %I AS vertices 
  ORDER BY vertices.geom <->ST_SetSrid(ST_MakePoint(long,lat),4326) LIMIT 1;',_table);
END
$$ LANGUAGE plpgsql;

Вярвам, че това трябва да реши проблемите ви.

Забележка:Открихме грешка с горното решение и използването на SETOF , опитах се да коригирам проблемите по-долу.

РЕДАКТИРАНЕ:

Няколко редакции тук, надяваме се, че едно решение ще реши проблема ви. Също така, моля, извинете всички синтактични грешки в моите предишни и настоящи решения; В момента нямам време да ги тествам. :(

1) Можете просто да опитате да върнете SETOF цели числа, знаейки, че разбира се ще върнете само едно. Вашият върнат тип в този случай ще бъде единичен ред с една колона, съдържащ цяло число.

CREATE or REPLACE FUNCTION convert_from_lon_lat(long float, lat float, _table text) 
RETURNS SETOF integer AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT id FROM %I AS vertices 
  ORDER BY vertices.geom <->ST_SetSrid(ST_MakePoint(long,lat),4326) LIMIT 1;',_table);
END
$$ LANGUAGE plpgsql;

и след това се обадете като:

SELECT * FROM convert_from_lon_lat(...);

2) За да върнете конкретно цяло число, мисля, че можете да опитате това:

CREATE or REPLACE FUNCTION convert_from_lon_lat(long float, lat float, _table text) 
RETURNS integer AS $$

DECLARE
return_id integer;

BEGIN
EXECUTE format('SELECT id FROM %I AS vertices 
  ORDER BY vertices.geom <->ST_SetSrid(ST_MakePoint(long,lat),4326) LIMIT 1;',_table)
  INTO return_id;

RETURN return_id;
END
$$ LANGUAGE plpgsql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да възстановим PostgreSQL дъмп файл в Postgres бази данни?

  2. Връщане на дублирани записи (activerecord, postgres)

  3. Функцията min(uuid) не съществува в postgresql

  4. Грешка:pg_config изпълним файл не е намерен при инсталиране на psycopg2 на Alpine в Docker

  5. Как да създадете колони за различни полета, без да прилагате функцията за завъртане