Obecně platí pravidlo, že by funkce neměly obalovat jednoduché SQL příkazy. Zvlášť, pokud se tyto funkce volají z komplikovanějších SELECTů. Jednak se tím snižuje prostor pro optimalizaci (SQL se uvnitř funkce optimalizuje izolovaně). Hlavně ale dochází ke generování a počítání velkého množství zanořených SQL příkazů, a to má dost velkou režii
Jeste dodam jeden postreh. V SQL se neda dost dobre strukturovane programovat. A kdo chce za kazdou cenu nejak sdilet kod, tak prave vklada SQL do funkci, ktere nasledne vola z jineho SQL. V Postgre s tim az tak velky problem neni, ale v Oracle to rekurzivni SQL pouziva jine SCN a vidi i data, ktere nadrazene SQL jeste videt nemuze (phantom read). Takze nejenze je to pomale, ale navic to neni logicky spravne, a ve vice-uzivatelskem prostredi vam takovy dotaz muze vratit totalni bramboracku.
To je dobrá připomínka - díky za ní.
V SQL prostředí ten nástroj, který bych měl používat proti duplikování kódu nejsou funkce! K tomu slouží pohledy - což hromada programátorů nepochopila -svoje znalosti přenášely do prostředí SP 1:1 z klasického programování - případně z Cobolu, FoxPro, kde pohledy neexistovaly - jde o nesprávné uchopení technologie - navíc v tomto případě s potenciálně fatálními důsledky.