यह बस काम करना चाहिए। enum
समस्या नहीं होनी चाहिए। पोस्टग्रेज 9.1 और 9.2 के साथ परीक्षण किया गया
CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');
CREATE TEMP TABLE venue (id int PRIMARY KEY, building_code building_code);
INSERT INTO venue VALUES (1, 'ENG');
CREATE OR REPLACE FUNCTION room_code(_id int) --!
RETURNS building_code AS
$func$
SELECT building_code FROM venue v WHERE v.id = $1 -- !
$func$ LANGUAGE SQL;
SELECT * FROM room_code(1);
छोड़कर ...
-
संस्करणों में 9.2 से पहले आप केवल स्थितीय (संख्यात्मक) पैरामीटर का उपयोग कर सकते हैं (
$1
) SQL फ़ंक्शन में (plpgsql फ़ंक्शंस के विपरीत)।
9.2+ में कॉलम नाम को प्राथमिकता दी जाएगी, ताकिWHERE
आपके मूल कोड का खंड हमेशा TRUE होगा और सभी पंक्तियाँ योग्य होंगी - सिवाय इसके कि आपका फ़ंक्शन केवल पहला लौटाता है, क्योंकि यहSETOF building_code
नहीं लौटाता है .
या तो अपने पैरामीटर का नाम बदलें या स्थितिगत पैरामीटर का उपयोग करें या, अधिमानतः, दोनों।
यदि आपको परस्पर विरोधी पैरामीटर नामों का उपयोग करना है, तो आप पैरामीटर को अर्हता प्राप्त करने के लिए फ़ंक्शन नाम का उपयोग करके वरीयता को ओवरराइड कर सकते हैं। पसंद:... WHERE v.id = room_code.id
-
आपको कॉलम नाम के रूप में टाइप नाम का उपयोग नहीं करना चाहिए।
- आपको गैर-उद्धृत मिश्रित केस नामों का उपयोग नहीं करना चाहिए जैसे
roomCode
, जिसे लोअर केस में मोड़ा जाएगा, जब तक कि आप डबल-कोट नहीं करते:"roomCode"
।
->SQLfiddle 3 प्रकारों के साथ