Hàm của bạn có một vài smallint
tham số.
Nhưng trong cuộc gọi, bạn đang sử dụng các ký tự số được cho là kiểu integer
.
Một chuỗi ký tự hoặc chuỗi ký tự ('123'
) không được nhập ngay lập tức. Nó vẫn là loại "không xác định" cho đến khi được gán hoặc truyền một cách rõ ràng.
Tuy nhiên, một ký tự số hoặc hằng số được gõ ngay lập tức. Hướng dẫn sử dụng:
Một hằng số không chứa dấu thập phân cũng không phải là số nguyên được ban đầu được cho là kiểu
integer
nếu giá trị của nó có lợi trong loạiinteger
(32 bit); nếu không nó được coi là loạibigint
nếu giá trị của nó phù hợp với kiểubigint
(64 bit); nếu không, nó được coi là loạinumeric
. Các hằng số chứa dấu thập phân và / orexponents ban đầu luôn được coi là loạinumeric
.
Cũng xem:
- LỖI PostgreSQL:hàm to_tsvector (ký tự thay đổi, không xác định) không tồn tại
Giải pháp
Thêm phôi rõ ràng cho smallint
tham số hoặc chuyển các ký tự được trích dẫn (không định kiểu).
Bản trình diễn
CREATE OR REPLACE FUNCTION f_typetest(smallint)
RETURNS bool AS 'SELECT TRUE' LANGUAGE sql;
Cuộc gọi không chính xác:
SELECT * FROM f_typetest(1);
Các cuộc gọi đúng:
SELECT * FROM f_typetest('1');
SELECT * FROM f_typetest(smallint '1');
SELECT * FROM f_typetest(1::int2);
SELECT * FROM f_typetest('1'::int2);
db <> fiddle here
Sqlfiddle cũ.