sql触发器确保约会之间的30天不起作用

Posted

技术标签:

【中文标题】sql触发器确保约会之间的30天不起作用【英文标题】:sql Trigger ensuring 30 days between appointments not working 【发布时间】:2021-07-12 19:38:03 【问题描述】:

尝试创建一个触发器以确保约会之间至少有 30 天,但这似乎不起作用:

delimiter //
create trigger time_between_doses
before insert on appointment
for each row
begin 
if datediff((select appointment_time from appointment where new.patientSSN = patientSSN), 
new.appointment_time) < 30
    THEN SIGNAL SQLSTATE '45000'
    SET mysql_ERRNO = 9996,
    MESSAGE_TEXT = 'Not 30 days between appointments for this patient';
end if;
end //
delimiter ;

【问题讨论】:

【参考方案1】:

您要检查的查询将使用exists。 “30 天”的含义还不是 100% 清楚。大概您想知道这是否返回任何行:

select a.*
from appointment a
where new.patientSSN = a.patientSSN and
      new.appointment_time < a.appointment_time + interval 30 day;

尚不清楚 30 天的限制是否适用于过去和未来。以及它是否仅适用于过去的约会或也适用于未来的约会。

您的版本是一个等待发生的错误,因为您正在使用一个需要单个值的子查询。如果子查询返回多行,则代码将产生错误。上面的逻辑应该和exists一起使用。

【讨论】:

以上是关于sql触发器确保约会之间的30天不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果触发器中的语句不起作用 SQL(Oracle)

触发器在 SQL Server 的 BulkCopy 中不起作用

更新触发器后 SQL Server 不起作用

触发器中的 ORACLE SQL 更新语句在 2 行后不起作用

从邮递员推送数据时,sql触发器不起作用

我在 SQL Plus 中创建了触发器而没有错误,但它不起作用