Kuidas kutsuda PostgreSQLis välja funktsiooni või protseduuri, mille mõni parameeter on SMALLINT tüüpi?

Postitas Erki Eessaar
Oletame, et andmebaasis on loodud funktsioon f_lopeta_teenus, mille parameeter p_teenuse_kood on SMALLINT tüüpi.

Üritades seda funktsiooni välja kutsuda lausega: SELECT f_lopeta_teenus(p_teenuse_kood:=436);

on tulemuseks veateade: ERROR: function f_lopeta_teenus(p_teenuse_kood => integer) does not exist LINE 1: select f_lopeta_teenus(p_teenuse_kood:=436);

Käivitatav funktsioon valitakse argumentide tüüpide alusel. Vaikimisi eeldus on, et literaali 436 poolt esitatav väärtus kuulub tüüpi INTEGER. Kuid funktsiooni parameeter on hoopis tüüpi SMALLINT.  Seega käivitades

SELECT f_lopeta_teenus(p_teenuse_kood:=436);

, otsib tarkvara funktsiooni, mille signatuur (tunnus) on f_lopeta_teenus (INTEGER).  Kuid andmebaasis pole sellise tunnusega funktsiooni, vaid on hoopis funktsioon tunnusega f_lopeta_teenus (SMALLINT). Sellest tuleneb veateade, et funktsiooni ei leitud.

Seega korrektseks väljakutseks on vajalik lause:

SELECT f_lopeta_teenus(p_teenuse_kood:=436::SMALLINT);

::SMALLINT teeb tüübiteisenduse tüüpi SMALLINT.

Alternatiivina võib kasutada tüübiteisenduseks CAST funktsiooni:

SELECT f_lopeta_teenus(p_teenuse_kood:=CAST(436 AS SMALLINT);

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!