FOR r IN SELECT * FROM tabulka LOOP IF r.x IS NOT NULL THEN RAISE NOTICE .. END LOOPV podstatě používám pouze SQL příkazy. Nedochází k žádnému přetypování, používám nativní SQL typy, Totéž v PL/Perlu
$sth = spi_query("SELECT * from tabulka"); while (defined ($row = spi_fetchrow($sth))) { if ($row->{x}) { elog(NOTICE, ... } }PL/pgSQL mi přijde mnohem názornější. Logiku procesu neutápím v uvozovkách, závárkách, atd. Což je ten hlavní argument, proč se naučit a používat ještě jeden jazyk. Jinak je to diskuze o tom, který jazyk je lepší,Java, c#, pascal nebo PL/SQL, T-SQL. Nebo zda používat spacializované jazyky nebo používat jeden univerzální. Z funkčního hlediska jsou tyto jazyky rovnocené. To, co tu píši platí pro SQL databáze. U objektových databází jsou pravděpodobně vhodnější klasické OOP jazyky. Psát formátovací funkci v PL/pgSQL nebo T-SQL je opruz. A výsledný kód se stejně bude relativně pomalý (mimo novější verze Oraclu, kde PL/SQL má klasický překladač). Tak ji napíši v perlu.
CREATE OR REPLACE FUNCTION separate_entry_and_code ( IN entry varchar, OUT code varchar, OUT description varchar) AS $$ use locale; my $code, $description; if ($_[0] =~ m/^(<([^>]*)>\s?)?(.+)$/ ) { $code = $2; $description = "<![cdata[$3]]>"; } return { code => $code, description => $description }; $$ LANGUAGE plperl;