无法识别功能
问题描述:
参数。我曾尝试写这样无法识别功能
(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;
+0
3)使用占位符:'... WHERE s.client_id = $ 1' – Abelisto
+0
非常感谢 – AndrewMontana
如果我在任何数量的子查询中更改该id,然后我会调用该函数,它的工作。所以问题是100%在这个参数 – AndrewMontana