PostgreSQL:如何返回复合类型
发布时间:2020-12-13 16:33:55 所属栏目:百科 来源:网络整理
导读:我试图在PostreSQL中使用存储函数获取复合值,如下所示. 我创建了一个名为PersonId的类型,我在名为Person的表中使用了该类型. 我在表格中插入了值. CREATE TYPE PersonId AS( id VARCHAR(32),issuer VARCHAR(32));CREATE TABLE Person( key INTEGER,pid Perso
我试图在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) 我哪里错了?
由于pid是复合,因此必须提取其列,否则将整个复合插入到v_pid变量的第一列中
select (pid).* into v_pid (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |