參數。我曾嘗試寫這樣無法識別功能
(SELECT s.schedule_id FROM schedule_client_visit s WHERE s.client_id = _id)
前綴,但它不工作。
參數。我曾嘗試寫這樣無法識別功能
(SELECT s.schedule_id FROM schedule_client_visit s WHERE s.client_id = _id)
前綴,但它不工作。
你有兩個選擇
1)保留一個名爲 「身份證」,但使用是指它functionName.ArgumentName(所以client_visits.id
)
https://www.postgresql.org/docs/current/static/xfunc-sql.html
[36.4.1]如果參數名稱與函數中當前的SQL命令中的任何列名稱相同,列名稱將優先。 要覆蓋此參數名稱,請使用 函數本身的名稱,即function_name.argument_name。
CREATE OR REPLACE FUNCTION client_visits(id INT)
RETURNS
TABLE("date_visit" Date, "time_visit" Time, "visit_type" VARCHAR(30) )
AS $$ BEGIN
RETURN QUERY SELECT schedule.date_visit, schedule.time_visit, schedule.visit_type FROM schedule
WHERE schedule.id IN (SELECT s.schedule_id FROM schedule_client_visit s WHERE s.client_id = client_visits.id);
RAISE Notice 'id =%', client_visits.id; END $$ LANGUAGE plpgsql;
2)你嘗試過,用下劃線(或其他),但不要忘了重命名功能頭的說法也是如此。
CREATE OR REPLACE FUNCTION client_visits(_id INT)
RETURNS
TABLE("date_visit" Date, "time_visit" Time, "visit_type" VARCHAR(30) )
AS $$ BEGIN
RETURN QUERY SELECT schedule.date_visit, schedule.time_visit, schedule.visit_type FROM schedule
WHERE schedule.id IN (SELECT s.schedule_id FROM schedule_client_visit s WHERE s.client_id = _id);
RAISE Notice 'id =%', _id; END $$ LANGUAGE plpgsql;
3)使用佔位符:'... WHERE s.client_id = $ 1' – Abelisto
非常感謝 – AndrewMontana
如果我在任何數量的子查詢中更改該id,然後我會調用該函數,它的工作。所以問題是100%在這個參數 – AndrewMontana