PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách sử dụng hỗn hợp đối số int và số trong hàm Postgres 9.1+

Các kiểu đa hình rất nghiêm ngặt trong thời điểm này - trong các trường hợp khác, PostgreSQL cố gắng ép kiểu hằng số thành kiểu phổ biến nhất, nhưng bước này bị thiếu đối với các kiểu đa hình - vì vậy trong trường hợp này, khi bạn đã mô tả vấn đề, bạn phải ép kiểu rõ ràng hoặc bạn không nên sử dụng các loại đa hình. Kế hoạch B vượt quá quá tải chức năng .

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;

Sau đó, mã của bạn sẽ hoạt động như mong đợi:

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL lấy và phát hành LOCK bên trong hàm được lưu trữ

  2. Chỉ mục postgres `gin_trgm_ops` không được sử dụng

  3. khách hàng psql có thể là một bàn cờ bây giờ…

  4. Mẫu postgreSQL cận âm

  5. Lọc theo phạm vi ngày (cùng tháng và ngày) qua các năm