Mis vahe on salvestatud protseduuril ja funktsioonil SQL-serveris?


Vastus 1:

See on sama kõrgetasemeline erinevus funktsiooni ja protseduuri osas enamikus programmeerimiskeeltes.

  • Protseduuri (või C / C ++ “tühist funktsiooni”) nimetatakse lihtsalt avalduseks ja kuigi sellel võib olla huvitavaid argumente ja see võib teha palju tööd, pole sellel huvitavat tagasiväärtust. Teiselt poolt, funktsioonil on kasulik tagasiväärtus, mida saab kasutada avaldistes või iseenesest avaldusena.

SQL:

  • Salvestatud protseduuril puudub tagasiväärtus ja seda saab teostada ainult CALL-i väljavõtte kaudu. Salvestatud funktsioon võib väärtuse tagastada ja seda saab kasutada kõikjal, kus saab kasutada avaldist. Eelkõige võite kasutada salvestatud funktsiooni SQL-lausetes, näiteks valige myfun (1,2,3); või valige mytab'ist *, kus myfun (a, b, c)> 3;

Tavaliselt on salvestatud protseduurid üsna suured kooditükid, mis võivad enda sees käivitada palju SQL-i. Salvestatud funktsioonid on tavaliselt lühikesed ja tavaliselt ei tööta sisemine SQL (kuigi pole ühtegi kindlat reeglit, mis ütleks, et nad ei saa).


Vastus 2:

Mõlemad on tehniliselt “salvestatud rutiinid” koos iga rutiiniga, mis tagastab midagi funktsiooniks märgistatud, ja mis tahes rutiiniga, mis ei ole “protseduur”.

Tõepoolest, näiteks Informixis, näiteks vanemate versioonidega tagasi ühilduvuse jaoks, mis oli tehtud enne, kui operatsiooni “loo funktsioon” lisati Informixi SQL-i süntaksisse, saate kasutada “loo protseduuri”, “loo funktsiooni” või “loo rutiini” vaheldumisi. protseduuri või funktsiooni loomiseks. Kui rutiin tagastab mis tahes väärtused (st sisaldab loomise klauslis RETURNING-klauslit ja kehas RETURN-avaldusi), tuleb rutiini süsteemikataloogi kirje is_proc veeru väärtus väärtuseks 'f'. Kui rutiin ei anna midagi tagasi, on is_proc 't' tõene.

Niisiis, kui ma loon katsemenetluse () tagastamise char (10);

Ma võin ka:

FUNKTSIOONI ANTAMINE

Huvitav veidrus.


Vastus 3:

Mõlemad on tehniliselt “salvestatud rutiinid” koos iga rutiiniga, mis tagastab midagi funktsiooniks märgistatud, ja mis tahes rutiiniga, mis ei ole “protseduur”.

Tõepoolest, näiteks Informixis, näiteks vanemate versioonidega tagasi ühilduvuse jaoks, mis oli tehtud enne, kui operatsiooni “loo funktsioon” lisati Informixi SQL-i süntaksisse, saate kasutada “loo protseduuri”, “loo funktsiooni” või “loo rutiini” vaheldumisi. protseduuri või funktsiooni loomiseks. Kui rutiin tagastab mis tahes väärtused (st sisaldab loomise klauslis RETURNING-klauslit ja kehas RETURN-avaldusi), tuleb rutiini süsteemikataloogi kirje is_proc veeru väärtus väärtuseks 'f'. Kui rutiin ei anna midagi tagasi, on is_proc 't' tõene.

Niisiis, kui ma loon katsemenetluse () tagastamise char (10);

Ma võin ka:

FUNKTSIOONI ANTAMINE

Huvitav veidrus.