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

Kesalahan sintaksis PostgreSQL dalam kueri berparameter pada tanggal $1

Pernyataan yang disiapkan

Penjelasan untuk ini dapat ditemukan dalam bab Konstanta Jenis Lain dari manual :

Penekanan saya yang berani.

Parameter untuk pernyataan yang disiapkan sebenarnya bukan literal menyengat tapi mengetik nilai , jadi Anda tidak dapat menggunakan formulir type 'string' . Gunakan salah satu dari dua formulir lainnya untuk memberikan nilai ke jenis yang berbeda, seperti yang sudah Anda temukan.

Contoh:

PREPARE foo AS SELECT $1::date;

EXECUTE foo('2005-1-1');

Mirip dengan PQexecParams di perpustakaan libpq C

Dokumentasi:

Alternatif , seperti yang disebutkan dalam kutipan di atas, adalah meneruskan OID dari masing-masing tipe data dengan paramTypes[] - jika Anda benar-benar membutuhkan pemerannya. Dalam kebanyakan kasus, ini akan berfungsi dengan baik untuk membiarkan Postgres memperoleh tipe data dari konteks kueri.

Anda bisa mendapatkan OID tipe data dari katalog sistem pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Anda harus menggunakan nama tipe internal yang benar. Misalnya:int4 untuk integer .
Atau dengan mudah beralih ke regtype :

SELECT 'date'::regtype::oid;

Ini lebih fleksibel karena alias yang dikenal untuk nama tipe juga diterima. Misalnya:int4 , int atau integer untuk integer .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fuzzy mencocokkan string dalam SQL

  2. permintaan untuk admin baris pertama saya untuk tidak pernah menghapus

  3. Oracle's OUTER JOIN (+) pada string - Migrasi PostgreSQL

  4. Periksa apakah kolom ada ketika ada beberapa tabel dengan nama yang sama dalam skema yang berbeda (PSQL 8.2)

  5. Migrasi Sekuel:relasi <tabel> tidak ada