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
integerjika nilainya cocok dengan jenisinteger(32 bit); jika tidak maka dianggap tipebigintjika nilainya cocok ketikbigint(64 bit); jika tidak, dianggap sebagai tipenumeric. Konstanta yang berisi titik desimal dan/atau eksponen awalnya selalu dianggap bertipenumeric.
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.