我有一個表VARCHAR
爲PRIMARY_KEY
,所以我的ID是隨機生成的,看起來像WUoN5VemT
或MQvOQidTi
。我只想寫一個函數,它需要一個數組作爲輸入並返回數組中包含的所有元素。我想下面的半代碼將表現出更好的更好的方式:Postgres數組作爲函數輸入爲where子句
CREATE OR REPLACE FUNCTION public."getInfo" (
"myIDs" varchar []
)
RETURNS varchar AS
$body$
BEGIN
SELECT * FROM "myTable" WHERE "id" IN($1) ORDER BY "idDate" DESC;
-- RETURN etc....
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
但問題是該陣列可以包含50個或更多項(100也是可以的),所以我需要儘可能快地做到這一點可能。接下來的問題是,上面的代碼不起作用。我經常使用IN
關鍵字找到多個值的解決方案,但有什麼方法可以將數組和條目組合?
有沒有機會使用函數來實現這個功能?
謝謝,但通過添加「ODER BY id_date DESC」得到以下錯誤: 查詢失敗:錯誤:列「id_date」必須出現在GROUP BY子句中或用於集合函數LINE 1: (SELECT)unterm($ 1))x(id)USING(id)ORDER BY「id_date」^ QUERY:SELECT(SELECT COUNT(*)FROM「myTable」JOIN使用(id)ORDER BY「myTable」。「id_date」DESC)語境:PL/pgSQL函數「get_info」。 出於測試目的,我將計算SELECT語句的結果。這將在稍後被替換... – Nrgyzer 2012-03-22 17:44:22
@Nrgyzer:你以一種不可能的方式改變了功能(我測試過它的功能)。你不能同時計算(*)和ORDER BY id_date。請更新你的問題與你實際想要達到的目標。 – 2012-03-22 17:52:39
嗯,好的...我剛剛刪除了COUNT(*),它的工作原理,很棒......並感謝您的幫助:) – Nrgyzer 2012-03-22 17:55:50