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

Pl/pgSQL tidak ada parameter $1 dalam pernyataan EXECUTE

Anda memiliki beberapa masalah di sini. Masalah langsungnya adalah:

Itu terjadi karena $1 di dalam SQL yang Anda berikan ke EXECUTE tidak sama dengan $1 di dalam badan fungsi utama. Placeholder bernomor dalam EXECUTE SQL berada dalam konteks EXECUTE, bukan dalam konteks fungsi sehingga Anda perlu memberikan beberapa argumen ke EXECUTE untuk placeholder tersebut:

execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
--            ^^^^^

Lihat Menjalankan Perintah Dinamis di manual untuk detailnya.

Masalah berikutnya adalah Anda tidak mengembalikan apa pun dari fungsi Anda yang RETURNS integer . Saya tidak tahu apa yang ingin Anda kembalikan, tetapi mungkin tablea Anda memiliki SERIAL id yang ingin Anda kembalikan. Jika demikian, maka Anda menginginkan sesuatu yang lebih seperti ini:

declare
    tabla text := 'dpol' || extract(year from $5::timestamp);
    id integer;
begin
    execute 'insert into ... values ($1, ...) returning id' into id using dpol_cia, ...;
    --                                        ^^^^^^^^^^^^  ^^^^^^^
    return id;
end

dalam fungsi Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menginstal Orafce.sql 3.0 di Windows 7

  2. Tampilan postgres tidak dikenali oleh rspec

  3. PostgreSQL dengan Masalah Pengembang SQL

  4. Temukan titik terdekat di Pandas DataFrames

  5. Menghubungkan ke RDS Postgres dari mesin jarak jauh