Я рассмотрел другие вопросы, которые соответствуют моей теме, но в моем случае двусмысленность, как мне кажется, происходит от переменной, имеющей то же имя, что и столбец.
Вот упрощенная версия функцииЯ пытаюсь создать:
CREATE OR REPLACE FUNCTION get_user_id(username TEXT)
RETURNS INTEGER AS $$
DECLARE
user_id BIGINT;
other_param TEXT;
BEGIN
SELECT INTO user_id user_id FROM users WHERE users.username = get_user_id.username;
SELECT INTO other_param users.value FROM users WHERE users.user_id = user_id;
RETURN user_id;
END
$$ LANGUAGE PLPGSQL
Проблема в том, что user_id
в правой части WHERE
рассматривается как ссылка на столбец.
Я определенно нуждаюсь в user_id
в локальной переменной, так как она будет использоваться в операциях UPDATE
и DELETE
далее по функции, но я не получу ее как параметр, только имя пользователя.
После некоторого чтения и ранее с некоторыми проблемами с параметрами я понял, что могу использовать get_user_id.username
, но это применимо только к параметрам, а не к локальным переменным (если я использую его с переменной, запрос с ошибкой, как тамне является FROM-предложением для get_user_id
).
Поэтому я упускаю что-то (не очень) очевидное в использовании переменных в запросах внутри функции?
--- edit
Извинения Я упростил функцию, конечно, естьпервый запрос, который получает user_id, и эта часть работает нормально.