У меня есть такая функция:
CREATE FUNCTION ISROOMAVAILABLE(P_ID_ROOM INT, P_DATE DATE) RETURN BOOLEAN
IS
V_COUNT INT;
BEGIN
SELECT count(*)
INTO V_COUNT
FROM CHECKIN A
LEFT JOIN CHECKOUT B ON (A.ID_RESERVATION = B.ID_RESERVATION)
WHERE A.ID_ROOM = P_ID_ROOM
AND ((A.DATE >= trunc(P_DATE) AND B.DATE IS NULL)
OR
(A.DATE <= trunc(P_DATE) AND B.DATE >= trunc(P_DATE)));
RETURN (V_COUNT > 0);
END;
Это возвращает истину, если комната (идентифицируемая по ее идентификатору) доступна в определенную дату.
И я хочу проверить несколько параметров, используя указанную выше функцию в качестве определяющего фактора в моем выборе:
SELECT Q.ID, COUNT(R.DATE_OUT - R.DATE_IN) AS DAYS
FROM QUARTO Q
JOIN CHECKIN CI ON Q.ID = CI.ID_ROOM
JOIN RESERVATION R ON CI.ID_RESERVATION = R.ID
WHERE (EXTRACT(YEAR FROM R.DATE_IN) = EXTRACT(YEAR FROM SYSDATE))
AND (ISROOMAVAILABLE(Q.ID, SYSDATE))
GROUP BY Q.ID
ORDER BY DAYS;
Я использую sysdate в функции, потому что мне все еще не хватает некоторых данных в базе данных, но я все равно получаю ошибку Relational Operator Invalid.
Как можно использовать функцию, указанную в предложении WHERE?
Прошу прощения за плохой перевод с португальского, я не знаю точных терминов на английском языке.