Я написал простую пользовательскую функцию для проверки наличия строк, соответствующих некоторым условиям:
CREATE OR REPLACE FUNCTION is_instructor_specialized_in(eid INT, course_area VARCHAR(50))
RETURNS BOOLEAN AS $$
SELECT EXISTS(SELECT 1 FROM Specializes s WHERE s.eid = eid AND s.name = course_area);
$$ LANGUAGE sql;
Я протестировал его с помощью следующего запроса:
SELECT is_instructor_specialized_in(2, 'Artificial Intelligence') as function_output,
EXISTS(SELECT 1 FROM Specializes s WHERE s.eid = 2 AND s.name = 'Artificial Intelligence') as ground_truth;
и функция дала неправильное значение true
, когда она должна оцениваться как false
(такой строки в таблице Specializes
нет): изображение
На самом деле он всегда дает значение true
. Я очень смущен. Есть ли причина, по которой это происходит?
Версия: PostgreSQL 13.2 на x86_64-apple-darwin19.6.0, скомпилированная Apple clang версии 11.0.3 (clang-1103.0.32.62), 64-разрядная
WHERE s.eid = eid
‹‹-- дайте вашему параметру функции другое имя (добавьте подчеркивание) - person wildplasser   schedule 03.04.2021