无法识别功能

问题描述:

参数。我曾尝试写这样无法识别功能

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

前缀,但它不工作。

+0

如果我在任何数量的子查询中更改该id,然后我会调用该函数,它的工作。所以问题是100%在这个参数 – AndrewMontana

你有两个选择

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