以下是在PostgreSQL 9.2
,
CREATE OR REPLACE FUNCTION getRows()
RETURNS TABLE (
"Name" character varying
,"Address" text
,"Phone" text
,"Email" character varying
,"Tin" character varying
,"DL.No1, DL.No2" text
,"Area" character varying
) AS
$func$
BEGIN
select acname as "Name", coalesce(nullif(concat_ws(', ', nullif(add1, ''),
nullif(add2, '')), ''), 'NIL') "Address", coalesce(nullif(concat_ws(', ',
nullif(phoneoff, ''), nullif(mobile, '')), ''), 'NIL') "Phone",case when email
<>'' then email else 'NIL' end as "Email",case when email <>'' then tin else
'NIL' end as "Tin",case when dlno1 ||', '||dlno2=', ' then 'NIL' else dlno1 ||',
'||dlno2 end as "DL.No1, DL.No2",areaname as "Area" from gtab12 left join
gtab47 using(areaid) where acgrcode = '204' order by areaname,"Name";
END
$func$ LANGUAGE plpgsql;
当select getRows()
错误正在发生时
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function getRows() line 4 at SQL statement
下面给出的实际上是 function getRow
内的选择查询返回的内容。
答案 0 :(得分:2)
如果没有SELECT
子句,则无法在plpgsql
函数中使用INTO
语句(您必须使用PERFORM
代替)。
你也忘记RETURN
了。
但是,如果你的功能很简单,你可以使用普通的sql
function(甚至是view)。
答案 1 :(得分:1)
要返回一组内容,您需要使用RETURN NEXT(一次返回一行)或RETURN QUERY(返回查询产生的行数)。
请参阅有关返回值的manual部分。
您的示例函数需要具有:
RETURN QUERY SELECT....;
RETURN;
注意需要第二个RETURN - 这是必需的,因为在函数退出之前可能有多个RETURN QUERY语句。