PostreSQL에서 다음과 같이 저장 함수를 사용하여 합성 값을 얻으려고합니다. PersonId라는 유형을 만들었고 Person이라는 테이블에이 유형을 사용했습니다.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$;
그러나 결과는 내가 예상했던 것과 다릅니다.
사실 I 이드 열에 될 값 (111)을 예상하고, 발행자 ABC 열의. 그러나 111과 ABC는 id 열에 결합되었습니다.# select person_lookup_id(1);
person_lookup_id
------------------
("(111,ABC)",)
(1 row)
# select * from person_lookup_id(1);
id | issuer
-----------+--------
(111,ABC) |
(1 row)
내가 잘못 들었습니까? pid
이후
사이드 노트의 첫 번째 열에 전체 복합를 삽입의 열을 추출해야합니다 복합 - 당신은'no_data_found' 예외를 잡을 필요가 없습니다. 기본적으로 포스트그레스는 던지지 않습니다. –