2014-10-29 64 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