【发布时间】:2021-03-23 04:28:15
【问题描述】:
我有这个功能:
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;
如果房间(由其 ID 标识)在特定日期可用,则返回 true。
我想使用上面的函数作为我选择的决定因素来检查多个参数:
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,因为我仍然缺少数据库中的一些数据,但我得到的错误仍然是“关系运算符无效”。
有什么方法可以使用我在“WHERE”子句中的功能?
请原谅我的葡萄牙语翻译不好,我不知道英文的确切术语。
【问题讨论】:
-
@OldProgrammer - 这不是完全相同的问题。您指向的线程是关于一个更难的问题,该函数需要布尔输入。在这个线程中,问题更简单——只有返回数据类型是一个问题,而且更容易解决。 SO上有很多其他类似的问题,我会找到一个并关闭这个帖子。
标签: sql oracle plsql where-clause sql-function