【发布时间】:2013-07-31 23:22:59
【问题描述】:
我正在做这个项目,我需要创建一个大的 HTML 表格,其中每个表格行是 15 分钟的间隔,每个表格列是一天。目标是在房间可用和不可用时向用户显示想要预订房间的用户。所有网页都是打印出正确 HTML 的 PL/SQL 包。
某个房间的桌子示例:
(不要介意不同的颜色)
所有房间定义都存储在一个包含开始日期、结束日期、开始时间、结束时间和星期几的 Oracle 数据库中。例如,一个定义可以是:
(07-31-2013 - 07-31-2014, 00:00 - 23:59, Mondays,Tuesdays and Fridays)
我担心的是,要构建我的 html 表的每个正方形,我需要进行查询以检查是否定义了该特定时期。 (例如,如果用户想查看一个房间从 10:00 到 14:00 的整周,则将进行 112 次查询以每隔 15 分钟构建表)更不用说用户最多可以查看 4 周并且从任何时间间隔(可能是从 00:00 到 23:59)。另一个问题是我需要检查房间定义,但我还必须多次检查以查看该时间间隔是否被预订占用......所以只需要一周查看 224 次查询。
我的解决方案是获取所有可能影响用户希望查看的时间段的房间定义和预订,并将它们放入一个集合中(1 个集合用于定义,1 个用于预订)。之后,我在这些集合上运行所有测试而不进行查询。我的主过程调用了一个函数,将两个集合作为参数发送,函数返回 true 或 false。
我想知道 oracle 是否可以处理这么多小请求,还是我对集合做了正确的事情?
我读过很多帖子说集合对记忆不好,我担心通过函数参数传递它们可能也无济于事......尽管它可能不适用于我的情况,考虑到集合可能永远不会有更多其中有 1-5 条记录。
我要检查它是否可用的查询是这样的:
SELECT DISTINCT 'Y'
FROM room_defenition
WHERE
START_DATE <= USER_DATE AND
END_DATE >= USER_DATE AND
--F_TO_DAY converts the date to the coresponding code
REGEXP_INSTR(MON||TUE||WED||THU||FRI||SAT||SUN,F_TO_DAY(USER_DATE)) <> 0 AND
START_TIME <= USER_START_TIME AND
END_TIME >= USER_END_TIME;
USER_DATE 将是我正在测试的当前列,而 USER_START_TIME 和 USER_END_TIME 将是当前间隔的两个边界。 (例如 07-31-2013 - 10:00 - 10:15)。
我在 where 子句中还有 2 个子查询来检查是否允许用户在这个房间进行预订...
【问题讨论】:
-
我不会在这里提供太多帮助,但是您的查询是什么样的?
-
添加了如果我不使用集合我的查询将如何
标签: sql performance oracle collections plsql