我有一个返回记录的函数
CREATE OR REPLACE FUNCTION atPeriod(
IN segment segmentST,
IN period period,
OUT n integer,
OUT s segmentST,
OUT p pointST)
RETURNS record AS
'$libdir/Hermes', 'atPeriodSegmentSTV1'
LANGUAGE c STABLE STRICT
COST 1;
我在另一个函数中调用该函数
CREATE OR REPLACE FUNCTION distance(seg1 segmentST, seg2 segmentST) RETURNS realTS AS
$BODY$
DECLARE
projseg1 record;
projseg2 record;
BEGIN
SELECT atPeriod(seg1,p) INTO projseg1;
SELECT atPeriod(seg2,p) INTO projseg2;
IF (projseg1).n = 2 AND (projseg2).n = 2 THEN
...
END IF;
END;
$BODY$ LANGUAGE plpgsql;
当我执行第二个功能时,我收到错误
********** Error **********
ERROR: record "projseg1" has no field "n"
SQL state: 42703
如果我在SQL语句中调用第一个函数
WITH Rec AS (
select 2 as seg_id, atPeriod(SegmentST(
pointst('2012-01-01 08:00:00', 1, 2),
pointst('2012-01-01 08:02:00', 2, 2)),
period('2012-01-01 08:00:00', '2012-01-01 08:01:00')
) as seg
)
Select (seg).n from rec
我收到值2且没有错误。
有任何提示如何解决这个问题?
答案 0 :(得分:0)
这种情况发生了,因为您projseg1
& projseg2
个变量是record
个,所以他们自己automatically configure自己查询结果列的行类型(正是row(row(n, s, p))
但不是,你想要的是什么:row(n, s, p)
)。
要仅选择行(未封装到另一行),您应该使用:
SELECT * INTO projseg1 FROM atPeriod(seg1, p);
-- or:
projseg2 := atPeriod(seg2, p);