我正在尝试使用 PostreSQL 中的存储函数获取复合值,如下所示。我创建了一个名为 PersonId 的类型,并在名为 Person 的表中使用了该类型。
我将值插入到表中。
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 将在 id 列中,而 ABC 在 issuer 列中。但是 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)
我哪里错了?