2015-03-03 54 views
-1
我目前使用PL/pgSQL的

和我有這樣一行代碼的東西:PL/pgSQL裏:選擇在不工作

FOR r_var in  
select distinct value as val, count(*) as count from table where value IN (input) GROUP BY value; 
LOOP 
--do something here 
END LOOP; 

輸入是從用戶即$$'A123','B456','C789'$$

我不知道爲什麼它不起作用,但如果我手動將值而不是使用輸入,它正在工作。

更新:

我發現問題在哪裏。

代碼必須是:

FOR r_var in 
EXECUTE 'select distinct value as val, count(*) as count from table where value IN ('||input||') GROUP BY value; 
LOOP 
--do something here 
END LOOP; 
+0

是否將SQL語句中包含的$$發送到dbms?列值具有哪種數據類型? (不是保留字?!?即需要分隔...) – jarlh 2015-03-03 08:44:26

+0

由於輸入(即'A123','B456','C789'),我使用$$。輸入必須是一個字符變化。 – newbie03 2015-03-03 08:47:44

+0

你不能要求幫助,同時也不能保留實際的功能定義。這不是建設性的。函數頭是這個問題的關鍵。就像你的Postgres版本一樣。 – 2015-03-03 18:45:04

回答

1

更改接受文本array功能:

select * from my_function(array['A123','B456','C789']::text) 

where子句中使用= any

where value = any (input) 

一般來說環路不好的解決方案。

至於建議的@a_horse的意見,可以保留功能,只是轉換字符串array

where value = any (string_to_array(input, ',')) 
+0

或者使用'string_to_array()'來保存參數類型並將其轉換爲函數中的數組。 – 2015-03-03 09:46:14