PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Melewati tabel sebagai parameter

SEPERTI yang disebutkan @dezso, Anda memerlukan SQL dinamis dalam kasus ini.

SQL Dinamis dengan EXECUTE

Jadi, Anda berada di jalur yang benar; membentuk pernyataan SQL dinamis menggunakan PL/pgSQL, tetapi Anda hanya perlu sentuhan akhir:

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;

Saya yakin ini akan menyelesaikan masalah Anda.

Catatan:Kami menemukan kesalahan dengan solusi di atas dan menggunakan SETOF , saya telah mencoba untuk memperbaiki masalah di bawah ini.

EDIT:

Beberapa pengeditan di sini, semoga satu solusi akan memperbaiki masalah Anda. Juga, mohon maafkan kesalahan sintaks dalam solusi saya sebelumnya &saat ini; Saya tidak punya waktu untuk menguji mereka sekarang. :(

1) Anda bisa mencoba mengembalikan SETOF bilangan bulat, mengetahui bahwa tentu saja Anda hanya akan mengembalikan satu. Jenis pengembalian Anda dalam kasus ini akan menjadi satu baris satu kolom yang berisi bilangan bulat.

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;

lalu panggil sebagai:

SELECT * FROM convert_from_lon_lat(...);

2) Untuk secara khusus mengembalikan bilangan bulat, saya pikir Anda dapat mencoba ini:

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. Memuat file CSV (nama file.csv.gz) zip ke tabel PostgreSQL

  2. Heroku Postgres:psql:FATAL:tidak ada entri pg_hba.conf untuk host

  3. Django Postgresql menjatuhkan default kolom saat bermigrasi

  4. Saya tidak tahu bagaimana Postgresql membuat pengguna di mac saya

  5. setel kata sandi kosong untuk pengguna PostgreSQL