Tady si dovolím oponovat - funkce má vrátit hodnotu nebo vyhodit vyjímku - vracet 1 nebo 0 nemá v jazyku, který podporuje obsluhu vyjímek smysl, a je to zrovna hezká ukázka toho, co by se dělat nemělo. V Postgresu se neobsloužená výjimka zapíše do logu - můžete mít log v CSV formátu a pak skrz FDW file se k tomu logu dostat z SQL. Technika, kterou ukazujete vede k dost nečitelnému a zbytečně nafouklému kódu,
BEGIN, END -- není to Pascal (ale ADA) potažmo ALGOL
PGAdmin má dost mizerný editor - mnohem praktičtější je psát skripty v klasickém programátorském editoru, a pak je skrz psql naiportovat do databáze. Navíc PGAdmin svádí k direktivním změnám objektů (třeba funkcí), a pak člověk nemá ani ten soubor.
Konflikty názvů proměnných z PLpgSQL a SQL jsou už pár let ošetřeny (pokud si uživatel nevypne kontrolu, tak se při konfliktu vyhodí vyjímka). Tradičnější je používání "_" pro proměnné plpgsql a aliasy pro SQL identifikátory.
Bez debuggeru se lze obejít docela dobře - díky ladícímu výstupu - příkaz RAISE NOTICE
Napsal jste skalární funkci - tj nevrací tabulku (ani kompozit) - měl byste ji volat ve skalárním kontextu
SELECT fx() nikoliv SELECT * FROM fx()
SQL Developer
Přečteno 31 978×
Přečteno 19 554×
Přečteno 19 507×
Přečteno 17 277×
Přečteno 16 239×