【问题标题】:Postgresql stored function returning only values not with column namesPostgresql 存储函数只返回不带列名的值
【发布时间】: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


【解决方案1】:

你需要:

SELECT * FROM search_result('c');

不只是:

SELECT search_result('c');

如果你想要一个表格结果。在SELECT 中调用的集合返回函数返回复合元组。

【讨论】:

  • 我只需要限制存储函数中的查询,所以我改变了函数......但现在它不会返回任何值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多