使用row_to_json和PL / pgSQL创建函数?

时间:2014-10-29 19:53:35

标签: sql function postgresql plpgsql

我首先要说我已经有一段时间不必使用SQL了,虽然我已经编写了SQL查询,但我还没有机会使用嵌入式函数这就是我在这里尝试做的事情......

我有一个查询,它本身会生成几行数据,我使用row_to_json函数格式化该数据,以便在rest api中使用。我目前在node.js实现中对查询进行了硬编码,但是想将其移动到Db中并简单地调用一个函数。我设法写了函数**但它只返回第一行数据。我确定我只是误解了一些简单的概念,但我的谷歌搜索并没有帮助我确定什么是正确的行动方案。请查看以下内容,让我知道为什么该函数只返回第一条记录。

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$

1 个答案:

答案 0 :(得分:2)

宣布RETURNS json

如果您想要一个集合,请将其声明为RETURNS SETOF json