我试图在Postresql中使用存储函数获取复合值,如下所示.
我创建了一个名为PersonId的类型,我在名为Person的表中使用了该类型.
我创建了一个名为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)
我哪里错了?
由于pid是复合,因此必须提取其列,否则将整个复合插入到v_pid变量的第一列中
select (pid).* into v_pid