FOR r IN SELECT * FROM tabulka LOOP
IF r.x IS NOT NULL THEN
RAISE NOTICE ..
END LOOP
V 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;