2014-10-29 32 views
0

我将首先声明我在一段时间内不必使用SQL,尽管我编写了SQL查询,但我还没有机会使用嵌入式函数,这正是我正在尝试做的这里...使用row_to_json和PL/pgSQL创建函数?

我有一个查询,它本身会产生多行数据,我使用row_to_json函数来格式化该数据以用于休息api。我目前有一个查询硬编码node.js实现,但想要将其移动到Db,只需调用一个函数。我已经设法编写** BUT **函数,它只返回第一行数据。我确信我只是误解了一些简单的概念,但我的谷歌搜索并没有帮助我确定什么是正确的行动方针。请查看以下内容,让我知道为什么该函数只返回第一条记录。

SELECT row_to_json(FooBar) FROM(SELECT car_items_t.item_id, car_items_t.item_name, 
car_items_t.item_desc, car_items_t.item_photo, car_items_t.item_price 
FROM "SS".rfid_t, "SS".tr_t, "SS".car_t, 
"SS".car_items_t, "SS".tr_items_t 
WHERE rfid_t.aid = 1 
AND rfid_t.tid = tr_t.tid AND tr_t.aid = car_t.aid 
AND tr_t.tid = tr_items_t.tid AND car_t.mid = car_items_t.mid 
AND tr_items_t.mid = car_t.mid) FooBar; 

VS. 

CREATE OR REPLACE FUNCTION "SS".getitemsbyrfid(integer) 
    RETURNS json AS 
$BODY$ 

SELECT row_to_json(FooBar) FROM(SELECT car_items_t.item_id, car_items_t.item_name, 
car_items_t.item_desc, car_items_t.item_photo, car_items_t.item_price 
FROM "SS".rfid_t, "SS".tr_t, "SS".car_t, 
"SS".car_items_t, "SS".tr_items_t 
WHERE rfid_t.aid = $1 
AND rfid_t.tid = tr_t.tid AND tr_t.aid = car_t.aid 
AND tr_t.tid = tr_items_t.tid AND car_t.mid = car_items_t.mid 
AND tr_items_t.mid = car_t.mid) FooBar; 

$BODY$ 

回答

2

它被宣布为RETURNS json

如果你想要一组,请声明RETURNS SETOF json