使用row_to_json和PL/pgSQL创建函数?
问题描述:
我将首先声明我在一段时间内不必使用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$
答
它被宣布为RETURNS json
。
如果你想要一组,请声明RETURNS SETOF json
。