Uznávám, že ten zápis z MSSQL je působivý a jednoduchý, ovšem nějak nevidím rozdíl ve výsledné funkčnosti.
"exec sp_LISTUJ 1, 2, 3" je poměrně nestandardní zápis, u kterého by člověk intuitivně nečekal, že mu vrátí result-set. Syntakticky je mi více po srsti použití toho "SELECT * FROM TABLE(function)", který jsem napsal předtím, ale to je subjektivní věc. V žábě ti ten můj zápis normálně vrátí záznamy do datagridu - v tom se to neliší od jakéhokoliv jiného SELECTu.
Jak vidíš z mého příkladu, pipelined funce lze použít pro parametrické filtrování, uniká mí ale důvod, proč nenapsat stejnou podmínku přímo do WHERE, případně, pokud je to statická podmínka, tak napsat klasické VIEW anebo, pokud je to dynamická záležitost, například podmínka závislá na přihlášeném uživateli, využít Oracle Virtual Privat Database (Oracle VPD) a Fine Grained Access Control.
Mimochodem, zmíněný FGA je výborná věc. Zní to složitě, ale přitom je to velmi jednoduché - tvá PLSQL funkce po zaregistrování vrací řetězec, který Oracle automaticky doplní do prováděného SQL příkazu do WHERE klauzule, samozřejmě v závislosti na tom, ke kterému objektu se v SQL přistupuje.
Všimni si také, že žádný příkaz IF ve funkce k filtrování nebyl potřeba. Není problém funkci použít pro parametrizovatelné ORDER BY (použije se jen ve funkci dynamický kurzor "OPEN c1 FOR 'SELECT * FROM employees ORDER BY last_name'". To mi ale připadá jako blbina, protože ORDER BY si většinou definuje koncák - tedy buď aplikace nebo přímo pisatel SQL (ORDER BY lze samozřejmě aplikovat i na vrácený result-set z pipelined funkce - "SELECT * FROM TABLE(pipe_pkg.get_dept_employees(60)) ORDER BY LAST_NAME").
Výhodou použití zápisu SELECT * FROM TABLE(function) oproti "exex proc" je možnost klidně výsledný result-set dále joinovat s dalšími tabulkami, aplikovat na něj WHERE podmínky a obecně veškerá zvěrstva, která SQL umožňuje :
SELECT
d.DEPARTMENT_NAME,
e.LAST_NAME,
e.FIRST_NAME
FROM
TABLE(pipe_pkg.get_dept_employees(60)) e
NATURAL JOIN DEPARTMENTS d
ORDER BY
e.LAST_NAME
K tomu případnému pokecu - piješ ty a Jaja pivo?