Luo ja käytä funktiota Azure Database for PostgreSQL-tietokannassa

Valmis

Olemme jo oppineet, että PostgreSQL tukee eri kieliä. Funktiot voidaan luokitella neljään eri tyyppiin:

  • SQL:llä kirjoitetut funktiot.
  • Toimintosarjakielifunktiot, jotka on kirjoitettu tuetussa toimintokielessä, kuten PL.pgSQL:ssä.
  • Sisäiset funktiot.
  • C-kielen funktiot.

Lisäksi funktion tarkoitus voidaan luokitella myös muuttuvaksi , muuttumattomaksi- tai vakaaksi.

muuttuva (oletusfunktio) voi muokata tietokantaa, eikä se välttämättä palauta aina samaa tulosta samoilla syöteparametreilla. Tämä tarkoittaa siis sitä, että aina kun tätä funktiota kutsutaan, se täytyy arvioida uudelleen.

vakaa -funktio ei voi muokata tietokantaa ja palauttaa saman tuloksen, jos se välittää samat argumentit ja suorittaa saman lausekkeen sisällä. Jos tätä funktiota kutsutaan useita kertoja, kyselyoptimointi voi käyttää tuloksia edellisestä kutsukermasta.

muuttumaton-funktio ei voi muokata tietokantaa ja palauttaa samat tulokset, jos sille välitetään samat argumentit riippumatta kyselystä, joka sitä kutsuu.

Funktion volatiliteetti vaikuttaa suuresti tehokkuuteen, jolla kyselyoptimointi käsittelee sitä.

Luo funktio

Funktio palauttaa yksittäisen arvon, ja sitä voidaan käyttää SELECT-lauseessa.

Funktion luomisen syntaksi on seuraava:

CREATE [OR REPLACE] FUNCTION
myfunction ([inputparam] type {default})
RETURNS returntype AS
$$
SQL body
$$
LANGUAGE 'language_name';
CREATE FUNCTION

Kuten tallennetuissa toimintosarjoissakin, merkkijono aloitetaan ja lopetetaan $$ -symbolilla.

Funktiot ottavat seuraavat parametrit:

  • nimen – voit halutessasi sisällyttää rakenteen nimen.
  • argmode – argumentin tila. Voi olla IN, OUT, INOUT tai VARIADIC. Oletusarvo on IN. VARDIAC on määrittämätön määrä samantyyppisiä syöteargumentteja, , ja sen jälkeen on OUT-argumentit. OUT- ja INOUT-argumentteja ei voi käyttää yhdessä RETURNS-TAULUKON merkintätallenteiden kanssa.
  • argname – argumentin nimi.
  • argtype – argumentin tietotyyppi. Voi olla perus-, yhdistelmä- tai toimialuetyyppi tai viitata taulukon saraketyyppiin. Saraketyyppi kirjoitetaan muodossa table_name.column_name%TYPE. Tämä tietotyyppi voi auttaa tekemään funktiosta riippumattoman taulukkomääritelmän muutoksista.
  • t_expr – Oletusarvo (samaa tyyppiä), jos parametria ei ole määritetty. Vain IN- ja INOUT-parametreilla on oletusarvo. Oletusarvoja sisältävillä parametrin jälkeisillä syöteparametreilla on myös oltava oletusarvot.
  • uudelleentyypiltään – Palautustietotyyppi, joka voi olla perus-, yhdistelmä- tai toimialuetyyppi tai viitata taulukon saraketyyppiin. Jos funktio ei palauta arvoa, määritä palautustyyppi mitätöitynä. Kun on OUT- tai INOUT-parametreja, RETURNS-lause voidaan jättää pois. Jos tulosparametrit ovat olemassa, sen on hyväksyttävä tulosparametrien viittaama tulostyyppi: RECORD, jos tulosparametreja on useita, tai saman tyyppinen kuin yksittäinen tulosteparametri. SETOF-muokkaustoiminto ilmaisee, että funktio palauttaa joukon kohteita yksittäisen kohteen sijaan. Sarakkeen tyyppiin viitataan kirjoittamalla table_name.
  • column_name – RETURNS-TAULUKON syntaksi -syntaksin tulostesarakkeen nimi. Tämä parametri määrittää nimetyn OUT-parametrin, paitsi että RETURNS-TAULUKKO viittaa myös RETURNS SETOF -funktioon.
  • column_type – RETURNS-TAULUKON syntaksin tulostesarakkeen tietotyyppi.
  • lang_name – toimintosarjan kirjoittamiseen käytetty kieli. Oletusarvo on SQL, jos sql_body on määritetty. Voi olla sql, c, sisäinen tai käyttäjän määrittämän menettelykielen nimi, esimerkiksi plpgsql.

Käytä avainsanoja IMMUTABLE, STABLE tai VOLATILE vihjeenä funktiota koskevaa kyselyoptimointitoimintoa koskien. OLETUSARVO on MUUTTUVA.

Funktion kutsuminen

Funktiota voidaan käyttää kyselyssä välittämällä siihen mitä tahansa olennaisia parametreja. Esimerkiksi:

SELECT myfunction(3), CatID, CatName
    FROM myCats

Sisäiset funktiot

PostgreSQL sisältää monia valmiita funktioita, joita voit käyttää kyselyissäsi. Näihin aiheisiin kuuluvat vertailujen tekeminen, tietojen koostaminen, matemaattiset funktiot jne. Online-ohjeissa on täydellinen luettelo PostgreSQL-funktioista.

Esimerkki sisäisestä merkkijonofunktiosta on alimerkkijonon.

substring (*string* text [ FROM *start* integer ] [ FOR *count* integer ] ) → text

Tässä funktiossa on kolme syöteparametria:

  • Merkkijono (kirjoita tekstiä)
  • FROM start (tyyppi kokonaisluku)
  • MÄÄRÄ (tyypin kokonaisluku)

Alimerkkijoite palauttaa syötetekstin osan alkaen start -merkistä ja pysähtyen sen jälkeen, kun määrä merkkiä. Esimerkiksi:

substring('Thomas' from 2 for 3) → hom
substring('Thomas' from 3) → omas
substring('Thomas' for 2) → Th

Tämä funktio on sama kuin alimerkkijora:

substr ( *string* text, *start* integer [, *count* integer ] ) → text
substr('alphabet', 3) → phabet
substr('alphabet', 3, 2) → ph

Muistiinpano

Jos funktiot ovat sinulle tuttuja, olet huomannut, että ensimmäisessä versiossa käytetään avainsanoja pilkkujen sijaan erottamaan argumentit toisistaan. PostgreSQL tarjoaa näiden funktioiden molemmat versiot.