I have this function:
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;
This returns a true if a room (identified by it's ID) is available in a certain date.
And I want to check multiple parameters using the function above as a determinant in my choice:
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;
I am using sysdate in the function because I am still missing some data on the database but still the error I get is "Relational Operator Invalid".
Any way to use the function I have in the "WHERE" clause?
Please excuse my bad translations from portuguese, I don't know the exact terms in english.