Để phân tách các hàng bạn lấy lại từ hàm, hãy xử lý nó giống như bất kỳ bảng nào khác:
SELECT * FROM karta_pacjenta('foo45678901');
Các hàm trả về một tập hợp các hàng còn được gọi là "hàm bảng".
Ngoài ra, những gì bạn trình bày sẽ không hiệu quả.
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;
-
Dấu ngoặc kép cho tên cột là một lỗi cú pháp. Sẽ phải có dấu ngoặc kép. Tuy nhiên, tốt hơn hết là bạn nên sử dụng các tên không được trích dẫn, hợp pháp, viết thường.
-
Không trích dẫn tên ngôn ngữ, đó là một số nhận dạng.
Phần còn lại là tùy chọn, nhưng lời khuyên tốt.
-
Một hàm SQL đơn giản thực hiện công việc ở đây.
-
Sử dụng cú pháp THAM GIA rõ ràng. Kết quả tương tự nhưng dễ duy trì hơn nhiều.
-
Việc sử dụng
varchar(11)
có lẽ là vô nghĩa thay vì chỉvarchar
hoặctext
như kiểu tham số. (Áp dụng ngoại lệ trường hợp góc.) -
Sử dụng báo giá đô la - điều này hoàn toàn không bắt buộc ở đây, nhưng nói chung là phong cách tốt để trích dẫn nội dung hàm. Không sớm thì muộn, bạn sẽ muốn bao gồm các dấu ngoặc kép trong phần nội dung.