Допустим, у меня есть таблица с именем "People"
с двумя столбцами "FirstName"
и "LastName"
и следующая функция, которая ссылается на эту таблицу (это придуманный и упрощенный пример с единственной целью проиллюстрировать мою проблему):
CREATE FUNCTION PUBLIC."SelectPeopleByFirstName" (
IN "FirstName" VARCHAR(100)
)
RETURNS TABLE (
"FirstName" VARCHAR(100)
, "LastName" VARCHAR(100)
)
READS SQL DATA
RETURN TABLE (
SELECT
"People"."FirstName"
, "People"."LastName"
FROM
PUBLIC."People"
WHERE
"People"."FirstName" = "FirstName"
)
Проблема в том, что в предложении WHERE
оператора SELECT
идентификатор "FirstName"
обрабатывается как ссылка на столбец таблицы "People"."FirstName"
вместо стандартного параметра "FirstName"
.
Теперь, Google говорит мне, что я не первый, кто столкнулся с этой проблемой, и из различных предложенных решений, которые я мог найти, единственное, что я нашел наиболее удовлетворительным, было квалифицировать идентификатор симя подпрограммы, например:
WHERE
"People"."FirstName" = "SelectPeopleByFirstName"."FirstName"
К сожалению, это не похоже на работу с HSQLDB, потому что я получаю следующую ошибку:
пользователю не хватает прав или объект неНайдено: SelectPeopleByFirstName.FirstName / Код ошибки: -5501 / Состояние: 42501
Конечно, я мог бы дать рутинный параметр aдругое, отличное имя, но я бы посчитал, что это скорее обходной путь, чем решение, потому что тогда функциональность подпрограммы будет зависеть от таблицы «Люди», не содержащей столбца с именем, идентичным имени параметра подпрограммы, котороечто-то, что может измениться без рутины, зная об этом.
Итак, я делаю / понимаю что-то здесь не так, или я действительно вынужден прибегнуть к грубым обходным путям, чтобы решить эту дилемму?