PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać mieszanych argumentów typu int i liczbowych w funkcji Postgresa 9.1+

Typy polimorficzne są w tym momencie rygorystyczne - w innych przypadkach PostgreSQL próbuje rzutować stałe na najczęściej spotykany typ, ale tego kroku brakuje dla typów polimorficznych - więc w tym przypadku, gdy opisałeś problem, musisz rzutować jawnie lub nie powinien używać typów polimorficznych. Plan B się skończył przeciążanie funkcji .

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;

Wtedy Twój kod będzie działał zgodnie z oczekiwaniami:

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. dodaj indeks do pola jsonb

  2. Różnica wydajności między UUID, CHAR i VARCHAR w tabeli PostgreSql?

  3. Dzielenie danych z PostgreSQL 11

  4. Jak uniknąć podkreśleń w Postgresql

  5. Wywołanie procedury składowanej w ramach procedury składowanej