मैं निम्नानुसार PostreSQL में संग्रहीत फ़ंक्शन के साथ एक समग्र मूल्य प्राप्त करने का प्रयास कर रहा हूं। मैंने PersonId नामक एक प्रकार बनाया, और मैंने व्यक्ति को एक टेबल नामक प्रकार का उपयोग किया।PostgreSQL: समग्र प्रकार को वापस कैसे करें
और मैंने तालिका में मूल्य डाला।
CREATE TYPE PersonId AS
(
id VARCHAR(32),
issuer VARCHAR(32)
);
CREATE TABLE Person
(
key INTEGER,
pid PersonId
);
INSERT INTO Person VALUES (1, ('111','ABC'));
INSERT INTO Person VALUES (2, ('222','DEF'));
CREATE OR REPLACE FUNCTION Person_lookup_id
(
p_key IN Person.key%TYPE
)
RETURNS Person.pid%TYPE
LANGUAGE plpgsql
AS $BODY$
DECLARE
v_pid Person.pid%TYPE;
BEGIN
SELECT pid INTO v_pid
FROM Person
WHERE key = p_key;
RETURN v_pid;
EXCEPTION
WHEN no_data_found THEN
RETURN NULL;
END;
$BODY$;
हालांकि, परिणाम जो मैंने अपेक्षित था उससे अलग था।
असल में मुझे उम्मीद है कि मूल्य 111 आईडी कॉलम में होगा, और एबीसी जारीकर्ता कॉलम में होगा। लेकिन 111 कॉलम में 111 और एबीसी संयुक्त किए गए थे।
# select person_lookup_id(1);
person_lookup_id
------------------
("(111,ABC)",)
(1 row)
# select * from person_lookup_id(1);
id | issuer
-----------+--------
(111,ABC) |
(1 row)
मैं कहाँ गलत था?
साइड नोट के पहले कॉलम में पूरे समग्र डालने कर रहे हैं अपने कॉलम निकालने चाहिए है - आप 'पकड़ने के लिए no_data_found' अपवाद जरूरत नहीं है। डिफ़ॉल्ट पोस्टग्रेस द्वारा इसे फेंक नहीं देगा। –