2
我似乎無法找到一種方法將我的查詢作爲參數傳遞給我的sql函數。我的問題是表'my_employees1'可能是動態的。無法將動態查詢傳遞到sql函數
DROP FUNCTION function_test(text);
CREATE OR REPLACE FUNCTION function_test(text) RETURNS bigint AS '
DECLARE ret bigint;
BEGIN
SELECT count(mt.id) INTO ret
FROM mytable as mt
WHERE mt.location_id = 29671
--and mt.employee_id in (SELECT id from my_employees1);
--and mt.employee_id in ($1);
$1;
RETURN ret;
END;
' LANGUAGE plpgsql;
select function_test('and mt.employee_id in (SELECT id from my_employees1)');
select function_test('SELECT id from my_employees1');
你可以用動態SQL解決這個問題。以[看看這裏開始](http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html)。您需要能夠在代碼中的某個位置找出查詢表的名稱及其列。另外,你的整個SQL語句必須是一個動態字符串。你不能隨意添加文本到SQL代碼。在你的函數中,你將追加/插入你的文本變量到一個現有的SQL代碼字符串中,以使事物動態化。現在,這是可行的,但我會建議看看你的數據模型,看看你是否可以重構。 **動態SQL是一個s –