Vastus (17.12.2023 11:25): Funktsiooni identifikaator e signatuur moodustub selle identifikaatorist ja sisendparameetritest. PostgreSQLis võib ühes ja samas skeemis olla mitu samanimelist funktsiooni, millel on erinev arv parameetreid või erinevat tüüpi parameetrid. Seega samast funktsioonist saab olla justkui mitu realisatsiooni ning konkreetne kasutatav realisatsioon valitakse vastavalt antud sisenditele (argumentidele). See on
ülelaadimise omadus.
Oletame, et andmebaasis on loodud funktsioon
f_lopeta_teenus, mille esimene parameeter on
p_teenus_kood, mille tüüp on SMALLINT ja teine parameeter on
p_selgitus, mis on tüüpi TEXT.
1. Süsteem eeldab argumendi (sisendväärtuse) alusel vale parameetri andmetüüpi.
Vale: SELECT f_lopeta_teenus(p_teenus_kood:=30, p_selgitus:='Osutus ebapopulaarseks');
Süsteem eeldab, et parameeter
p_teenus_kood on tüüpi INTEGER.
Õige: SELECT f_lopeta_teenus(p_teenus_kood:=30::SMALLINT, p_selgitus:='Osutus ebapopulaarseks');
::SMALLINT - tüübiteisendus tüüpi SMALLINT.
2. Parameetri nimi on väljakutses valesti kirjutatud.
Vale: SELECT f_lopeta_teenus(p_teenus
e_kood:=30::SMALLINT, p_
teenus_selgitus:='Osutus ebapopulaarseks');
Õige: SELECT f_lopeta_teenus(p_teenus_kood:=30::SMALLINT, p_selgitus:='Osutus ebapopulaarseks');
3. Osadele parameetritele ei anta väljakutses väärtust (argumenti) (parameetritele saab funktsiooni loomisel anda vaikimisi väärtuse ja siis ei pea nendele väljakutses väärtust andma).
Vale: SELECT f_lopeta_teenus(p_teenus_kood:=30::SMALLINT);
Õige: SELECT f_lopeta_teenus(p_teenus_kood:=30::SMALLINT, p_selgitus:='Osutus ebapopulaarseks');
4. Funktsiooni parameetritele viitamiseks ei kasutata nime ning argumentide järjekord on väljakutses vale.
Vale: SELECT f_lopeta_teenus('Osutus ebapopulaarseks', 30::SMALLINT);
Õige: SELECT f_lopeta_teenus(30::SMALLINT, 'Osutus ebapopulaarseks');
5. Funktsiooni otsitaks valest skeemist. Vaikimisi skeem on
public. Oletame, et funktsioon on hoopis skeemis
funktsioonid.
Vale: SELECT f_lopeta_teenus(p_teenus_kood:=30, p_selgitus:='Osutus ebapopulaarseks');
Õige: SELECT
funktsioonid.f_lopeta_teenus(p_teenus_kood:=30::SMALLINT, p_selgitus:='Osutus ebapopulaarseks');