【发布时间】:2014-04-22 05:09:37
【问题描述】:
我是 Postgresql 的新手。我刚刚创建了复合类型的函数。
以下是我的代码:
create type search_type as (
result_id bigint,
result_name character varying,
result_loc character varying,
result_type character varying,
result_pic character varying
);
CREATE OR REPLACE FUNCTION search_result("@search_text" character varying)
RETURNS SETOF search_type AS
$BODY$
DECLARE r search_type%rowtype;
BEGIN
FOR r IN SELECT "User_id" AS result_id, CONCAT("User_firstname", ' ', "User_lastname") AS result_name, "User_loc" AS result_loc, "User_picurl" AS result_pic, 'user' AS result_type FROM users_list WHERE CONCAT("User_firstname", ' ', "User_lastname") LIKE CONCAT("@search_text", '%') LOOP
RETURN NEXT r;
END LOOP;
FOR r IN SELECT "Community_id" AS result_id, "Community_name" AS result_name, "Community_location" AS result_loc, "Community_img_url" AS result_pic, 'community' AS result_type FROM community_list WHERE "Community_name" LIKE CONCAT("@search_text", '%') AND "Type" = 'Created' LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END
$BODY$
LANGUAGE plpgsql
但是当我像下面的代码那样调用存储函数时,它只会得到没有列名的数据。
SELECT search_result('c');
会是什么原因?
如何返回带有值的列名?
以上是返回的记录。
但我需要得到结果:
result_id result_name result_loc result_pic result_type
--------- ----------- ---------- ----------- ----------
13 test1 San Francisco user
14 test2 San Francisco user
15 test3 San Francisco user
16 test4 San Francisco user
17 test5 San Francisco user
我怎样才能得到上面的结果?
更新
新代码:
CREATE OR REPLACE FUNCTION search_result("@search_text" character varying, "@row_start" integer, "@row_end" integer)
RETURNS SETOF search_type AS
$BODY$
DECLARE r search_type%rowtype;
BEGIN
FOR r IN SELECT "User_id" AS result_id, CONCAT("User_firstname", ' ', "User_lastname") AS result_name, "User_loc" AS result_loc, "User_picurl" AS result_pic, 'user' AS result_type FROM users_list WHERE CONCAT("User_firstname", ' ', "User_lastname") LIKE CONCAT("@search_text", '%') ORDER BY CONCAT("User_firstname", ' ', "User_lastname") ASC LIMIT "@row_end" OFFSET "@row_start" LOOP
RETURN NEXT r;
END LOOP;
FOR r IN SELECT "Community_id" AS result_id, "Community_name" AS result_name, "Community_location" AS result_loc, "Community_img_url" AS result_pic, 'community' AS result_type FROM community_list WHERE "Community_name" LIKE CONCAT("@search_text", '%') AND "Type" = 'Created' ORDER BY "Community_name" ASC LIMIT "@row_end" OFFSET "@row_start" LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END
$BODY$
LANGUAGE plpgsql
然后我将程序称为:
SELECT * FROM search_result('t',3,0)
但没有返回值。
【问题讨论】:
-
@a_horse_with_no_name 我刚刚改变了我的问题....
-
好的,我得到了解决方案
标签: postgresql stored-procedures postgresql-9.1 stored-functions