Untuk menguraikan baris yang Anda dapatkan kembali dari fungsi, perlakukan seperti tabel lainnya:
SELECT * FROM karta_pacjenta('foo45678901');
Fungsi yang mengembalikan sekumpulan baris juga disebut "fungsi tabel".
Selain itu, apa yang Anda presentasikan tidak akan berfungsi.
CREATE FUNCTION karta_pacjenta(_pe varchar)
RETURNS TABLE(data DATE, imie TEXT, nazwisko TEXT
, diagnoza TEXT,przepisany lek TEXT) AS
$func$
SELECT w.dzien, p.imie, p.nazwisko, ch.nazwa, l.nazwa
FROM pacjenci p
JOIN diagnozy d USING (pesel) -- shorthand if columns are unambiguous
JOIN wizyty w USING (pesel)
JOIN choroby ch ON ch.kod_choroby = d.kod_choroby
JOIN recepty r ON r.nr_wizyty = w.nr_wizyty
JOIN leki l ON l.kod_leku = r.kod_leku
WHERE p.pesel = _pe
$func$ LANGUAGE sql;
-
Kutipan tunggal untuk nama kolom adalah kesalahan sintaksis. Harus menjadi tanda kutip ganda. Lebih baik Anda selalu menggunakan nama yang tidak dikutip, legal, dengan huruf kecil.
-
Jangan mengutip nama bahasa, itu adalah pengenal.
Sisanya opsional, tetapi saran yang bagus.
-
Fungsi SQL sederhana berfungsi di sini.
-
Gunakan sintaks JOIN eksplisit. Hasil yang sama, tetapi lebih mudah dirawat.
-
Mungkin tidak ada gunanya menggunakan
varchar(11)
alih-alih hanyavarchar
atautext
sebagai tipe param. (Pengecualian kasus sudut berlaku.) -
Gunakan kutipan dolar - yang sepenuhnya opsional di sini, tetapi umumnya gaya yang baik untuk mengutip badan fungsi. Cepat atau lambat Anda pasti ingin menyertakan tanda kutip tunggal di badan.