2013-08-13 5 views
6

मैं निम्नानुसार 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) 

मैं कहाँ गलत था?

+0

साइड नोट के पहले कॉलम में पूरे समग्र डालने कर रहे हैं अपने कॉलम निकालने चाहिए है - आप 'पकड़ने के लिए no_data_found' अपवाद जरूरत नहीं है। डिफ़ॉल्ट पोस्टग्रेस द्वारा इसे फेंक नहीं देगा। –

उत्तर

12

pid के बाद से एक समग्र आप अन्यथा आप v_pid चर

select (pid).* into v_pid 
+0

अंततः मैं इसे HOURS के लिए खोज रहा हूं! धन्यवाद। – HLL

+0

आपको धन्यवाद! .... –

संबंधित मुद्दे