PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL एक कस्टम डेटा प्रकार के साथ एक फ़ंक्शन लौटाता है

यह बस काम करना चाहिए। 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 प्रकारों के साथ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज में कॉलम को कई पंक्तियों में विभाजित करें

  2. एकाधिक थ्रेड्स का उपयोग करके फ़ाइल लिखना

  3. पोस्टग्रेएसक्यूएल का परिचय

  4. PostgreSQL में महीने के हिसाब से ग्रुप कैसे करें

  5. कैसे Asind () PostgreSQL में काम करता है