PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвате смесени int и числови аргументи във функция на Postgres 9.1+

Полиморфните типове са стриктни в този момент - в други случаи PostgreSQL се опитва да прехвърли константи към най-често срещания тип, но тази стъпка липсва за полиморфните типове - така че в този случай, когато сте описали проблема, трябва да прехвърлите изрично или не трябва да използва полиморфни типове. План Б е над претоварването на функции .

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;

Тогава вашият код ще работи според очакванията:

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 обединява 2 таблици

  2. Как да наблюдавате PostgreSQL с помощта на Nagios

  3. docker-compose postgres рестартиране след изпълнение на скриптове в docker-entrypoint-initdb.d

  4. Postgresql:Изчислете ранга по брой клаузи true OR

  5. Получаване на стойности с двойна точност от непоследователни низове за използване на ST_GeomFromText (PostGIS)