sql - Oracle中的日期时间格式
问题描述
我是 sql 新手,正在研究一个示例。在我创建的表中,我有评论表:
CREATE TABLE comments (
club VARCHAR2(60) NOT NULL,
nick VARCHAR2(35),
msg_date DATE,
title VARCHAR2(100) NOT NULL,
director VARCHAR2(50) NOT NULL,
subject VARCHAR2(100),
message VARCHAR2(1500),
valoration NUMBER(2),
CONSTRAINT PK_COMMENTS PRIMARY KEY (nick,msg_date),
CONSTRAINT FK_COMMENTS_MEMBER FOREIGN KEY (nick,club) REFERENCES membership ON DELETE CASCADE,
CONSTRAINT FK_COMMENTS_MOVIES FOREIGN KEY (title,director) REFERENCES movies,
CONSTRAINT CK_COMMENTS_VAL CHECK (valoration<11)
);
我被要求创建一个执行以下操作的触发器:如果评论与已存储的另一个评论在同一日期到达,则将其注册为“一秒后”的日期。我遇到的问题是我不知道如何将“一秒”转换为日期。关于如何解决这个问题的任何想法?
解决方案
msg_date + 间隔 '1' 秒
或者 msg_date + (1/(24*60*60))
然而,这整个场景充满了危险。在触发器中检查表中的现有消息时,该表可能在其他事务中发生变化,因此这里存在竞争条件的真正风险 - 两条消息都将现有消息增加 1 秒,然后将具有相同的日期。无论检查是在触发器还是应用程序代码中,情况都是如此。
如果这是一个真实的场景,我会避免触发,使用时间戳而不是日期,其中精度介于毫秒和纳秒之间,并考虑如何处理与业务问题具有相同时间戳的消息的较低风险 - 什么是如果它确实发生的含义。
推荐阅读
- python - 我正在用python编写单元测试。导入模块时出现此错误
- typescript - 从多种类型中创建一个对象类型
- c - sigaction未初始化gcc 7
- reactjs - 如何获取格式化文本draft-js
- python - how to inherit __init__ attributes from parent class to __init__ in the child class?
- angularjs - DevExpress - 如果另一个单元格具有值,如何禁用一个单元格的编辑
- android - 错误代码 413:您的客户端发出的请求在 WEB VIEW 中太大
- substrate - 在 Polkadot 应用程序开发人员选项卡中,您如何编码 Rust 元组?
- python-3.x - 使用给定 url、代理和用户凭据的 python 下载文件的代码
- scala - 测试中*的含义是什么?