【发布时间】:2015-12-18 15:25:19
【问题描述】:
我们的用例:
对于表USERS:
更新所有行(为列ACTIVE 设置值'N')以防用户处于非活动状态(列'LAST_VISIT')超过60 分钟。
Google 帮我找到了如何在 db 中获取当前时间(我使用Oracle):
SELECT sysdate FROM dual;
然后我找到了如何找到两个日期之间分钟差的方法:
SELECT(date1 - date2)*1440
看起来有点丑……不过还好。
现在,我正在尝试将所有内容组合在一起:
UPDATE USERS u
SET ACTIVE='N'
WHERE SELECT((SELECT sysdate FROM dual) - u.LAST_VISIT)*1440 >60;
能否请您查看我的最终查询。
没事吧?或者,也许,可以优化它?
【问题讨论】:
-
您可以随时在事务中运行更新,检查结果,如果一切正常,则提交或回滚。请记住,您可能会阻止其他用户
-
SYSDATE是一个函数,您可以直接引用它,无需子选择:WHERE (sysdate - u.LAST_VISIT)*1440 > 60。
标签: sql database oracle oracle11g sql-update