2017-05-04 134 views
0

參數。我曾嘗試寫這樣無法識別功能

(SELECT s.schedule_id FROM schedule_client_visit s WHERE s.client_id = _id) 

前綴,但它不工作。

+0

如果我在任何數量的子查詢中更改該id,然後我會調用該函數,它的工作。所以問題是100%在這個參數 – AndrewMontana

回答

2

你有兩個選擇

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; 
+0

3)使用佔位符:'... WHERE s.client_id = $ 1' – Abelisto

+0

非常感謝 – AndrewMontana