我是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');
原因是什么?
如何使用值返回列名?
以上是recorsd返回。
但我需要得到结果:
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)
但没有返回任何值。
答案 0 :(得分:2)
你需要:
SELECT * FROM search_result('c');
不仅仅是:
SELECT search_result('c');
如果你想要一个表结果。在SELECT
中调用的集返回函数返回复合元组。