PostgreSQL函数不返回值

时间:2017-03-28 13:35:45

标签: postgresql function

- 我无法理解错误在哪里

CREATE OR REPLACE FUNCTION get_person_membership (IN person_urn CHARACTER VARYING)

   RETURNS TEXT  AS
$BODY$

DECLARE
result text;
urn ALIAS FOR $1;

BEGIN

SELECT INTO result pers.mx_groupmember FROM mt_person AS pers, mxt_recordheader AS rech
WHERE rech.primaryurn = 'urn'
AND rech.entitytype = 'person' 
AND rech.logicalserverprefix = 'EA'
AND rech.id = pers.id;
RETURN result;

END;
$BODY$
LANGUAGE plpgsql
VOLATILE
COST 100

2 个答案:

答案 0 :(得分:1)

我简化了您的查询:

  • 对于输入,您可以使用$ 1,这可以指导您的情况。
  • 如果您不需要其他任何地方,您可以直接返回结果。

      

    从get_person_membership中选择*('某些');

CREATE OR REPLACE FUNCTION get_person_membership (IN person_urn CHARACTER VARYING) 
RETURNS TEXT  AS
$BODY$

BEGIN

RETURN (select pers.mx_groupmember --returns single value
FROM mt_person AS pers, mxt_recordheader AS rech
WHERE rech.primaryurn = $1 --input value from person_urn 
AND rech.entitytype = 'person' 
AND rech.logicalserverprefix = 'EA'
AND rech.id = pers.id);

END;
$BODY$
LANGUAGE plpgsql
VOLATILE
COST 100

答案 1 :(得分:0)

不需要PL / pgSQL,一个简单的SQL函数就可以:

CREATE OR REPLACE FUNCTION get_person_membership (IN person_urn CHARACTER VARYING)
   RETURNS TEXT  AS
$BODY$
  SELECT pers.mx_groupmember 
  FROM mt_person AS pers
    JOIN mxt_recordheader AS rech ON rech.id = pers.id
  WHERE rech.primaryurn = person_urn --<< input parameter
    AND rech.entitytype = 'person' 
    AND rech.logicalserverprefix = 'EA';
$BODY$
LANGUAGE sql;