Jenis polimorfik saat ini ketat - dalam kasus lain, PostgreSQL mencoba untuk memberikan konstanta ke jenis yang paling umum, tetapi langkah ini tidak ada untuk jenis polimorfik - jadi dalam kasus ini, ketika Anda telah menjelaskan masalah, Anda harus mentransmisikan secara eksplisit atau Anda sebaiknya tidak menggunakan tipe polimorfik. Paket B telah berakhir kelebihan fungsi .
CREATE OR REPLACE FUNCTION public.icase1(cond1 boolean,
res1 integer, conddefault integer)
RETURNS integer AS $$
SELECT CASE WHEN $1 THEN $2 ELSE $3 END;
$$ LANGUAGE sql;
CREATE OR REPLACE FUNCTION public.icase1(cond1 boolean,
res1 numeric, conddefault numeric)
RETURNS numeric AS $$
SELECT CASE WHEN $1 THEN $2 ELSE $3 END;
$$ LANGUAGE sql;
Maka kode Anda akan berfungsi seperti yang diharapkan:
postgres=> select icase1(true, 1.0, 0); icase1 -------- 1.0 (1 row) postgres=> select icase1(true, 1.0, 1.0); icase1 -------- 1.0 (1 row) postgres=> select icase1(true, 1, 0); icase1 -------- 1 (1 row)