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

Tidak ada fungsi yang cocok dengan nama dan tipe argumen yang diberikan

Fungsi Anda memiliki beberapa smallint parameter.
Tetapi dalam panggilan, Anda menggunakan literal numerik yang dianggap sebagai tipe integer .

String literal atau konstanta string ('123' ) tidak langsung diketik. Itu tetap ketik "tidak diketahui" sampai ditugaskan atau dilemparkan secara eksplisit.

Namun, literal numerik atau konstanta numerik langsung diketik. Panduan:

Konstanta numerik yang tidak mengandung titik desimal maupun eksponen awalnya dianggap bertipe integer jika nilainya cocok dengan jenis integer (32 bit); jika tidak maka dianggap tipebigint jika nilainya cocok ketik bigint (64 bit); jika tidak, dianggap sebagai tipe numeric . Konstanta yang berisi titik desimal dan/atau eksponen awalnya selalu dianggap bertipe numeric .

Lihat juga:

  • ERROR PostgreSQL:fungsi to_tsvector(karakter bervariasi, tidak diketahui) tidak ada

Solusi

Tambahkan pemeran eksplisit untuk smallint parameter atau meneruskan literal yang dikutip (tidak diketik).

Demo

CREATE OR REPLACE FUNCTION f_typetest(smallint)
  RETURNS bool AS 'SELECT TRUE' LANGUAGE sql;

Panggilan salah:

SELECT * FROM f_typetest(1);

Panggilan yang benar:

SELECT * FROM f_typetest('1');
SELECT * FROM f_typetest(smallint '1');
SELECT * FROM f_typetest(1::int2);
SELECT * FROM f_typetest('1'::int2);

db<>main biola di sini
sqlfiddle lama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan PostgreSQL saat mencoba membuat ekstensi

  2. Setel ulang penghitung kenaikan otomatis di postgres

  3. django.db.utils.OperationalError Tidak dapat terhubung ke server

  4. Penyelaman Cloud Vendor:PostgreSQL di Google Cloud Platform (GCP)

  5. psycopg2 bagaimana menangani TypeError:tidak semua argumen dikonversi selama pemformatan string