फ़ंक्शन से वापस आने वाली पंक्तियों को विघटित करने के लिए इसे किसी अन्य तालिका की तरह मानें:
SELECT * FROM karta_pacjenta('foo45678901');
पंक्तियों के एक सेट को लौटाने वाले फंक्शन को "टेबल फंक्शन" भी कहा जाता है।
इसके अलावा, आपने जो प्रस्तुत किया वह काम नहीं करेगा।
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;
-
कॉलम नामों के लिए सिंगल कोट्स एक सिंटैक्स त्रुटि है। डबल-कोट्स होना होगा। बेहतर होगा कि आप हमेशा गैर-उद्धृत, कानूनी, लोअर केस नामों का उपयोग करें।
-
भाषा का नाम उद्धृत न करें, यह एक पहचानकर्ता है।
बाकी वैकल्पिक है, लेकिन अच्छी सलाह है।
-
एक साधारण SQL फ़ंक्शन यहाँ काम करता है।
-
स्पष्ट जॉइन सिंटैक्स का प्रयोग करें। वही परिणाम, लेकिन बनाए रखना बहुत आसान है।
-
varchar(11)
. का उपयोग करना शायद व्यर्थ है सिर्फvarchar
. के बजाय याtext
परम प्रकार के रूप में। (कॉर्नर केस अपवाद लागू होते हैं।) -
डॉलर-उद्धरण का उपयोग करें - जो यहां पूरी तरह से वैकल्पिक है, लेकिन आमतौर पर फ़ंक्शन बॉडी को उद्धृत करने के लिए अच्छी शैली है। देर-सबेर आप बॉडी में सिंगल कोट्स शामिल करना चाहेंगे।