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

Postitas Erki Eessaar, 01.06.2022 00:00:00 (muudeti 03.12.2024 20:01:29)
Tagasi nimekirja
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);


Kas postitus oli kasulik?

Anna postitusele hinnang (1 – halb, 5 – väga hea):

Keskmine hinne: Pole veel hinnatud