我的简化表结构如下所示:
MESSAGES(Id NUMBER,Content NVARCHAR2, Received_time TIMESTAMP)
DIRECTORIES(Id NUMBER, Name NVARCHAR2, PARENT NUMBER)
MESSAGES_USERS(Id NUMBER, MSG NUMBER (FK MESSAGES(Id)), USER NUMBER, DIRECTORY NUMBER (FK DIRECTORIES(Id)))
因此,任务是根据接收时间将消息移动到适当的目录中。它是通过更新 MASSAGES_USERS 表和更改 DIRECTORY id 来实现的。准备好的目录结构如下所示:
2012--
|
--- 04/2012
|
--- 05/2012
|
--- 06/2012
因此,我必须将 2012 年 4 月收到的消息移动到名为 04 的目录中,该目录是当前用户目录结构中名为 2012 的目录的后代。我使用名称搜索目录
name LIKE TO_CHAR(M.Received_time, 'MM')||'/'||EXTRACT(YEAR FROM M.Received_time)
有没有办法在不使用游标的情况下更新一条 UPDATE 语句中每条消息的目录?我已经尝试了一些相关的更新,但它们(即使有一些巨大的子查询)都不是一个合适的解决方案。
该语句应该使用消息接收时间(它要求加入这三个表)和 MESSAGES_USERS 表中的 UPDATE DIRECTORY 字段以及适当的接收 ID 来获取适当的目录 ID。
我不知道如何强制 oracle 在不使用游标循环指定一条消息的 id 的情况下使用适当的目录更新每条消息。这甚至可能吗?