请有人启发我如何创建具有60的上限和20的下限的触发器。我正在处理一项任务,该任务需要限制运输的员工年龄范围公司在oracle 11g上。谢谢为出生日期创建触发器
回答
不要使用触发器来强制关系完整性,使用约束。这就是他们的目的。
你没有为自己提供表结构而烦恼,所以你需要为你的实际表调整它。
alter table employees
add constraint minimum_age_ck check
(hire_date >= add_months(date_of_birth, 240);
alter table employees
add constraint maximum_age_ck check
(hire_date <= add_months(date_of_birth, 720);
当然,如果你的employees
表缺少一个hire_date
列你有一个很大的问题。
伟大的解决方案。 *不要使用触发器*总是要走的路! – haki
@APC由于员工可能在公司有多个雇佣期,无论如何,雇佣日期可能应该在不同的表中。 –
谢谢。我终于用这个
alter table staff
add constraint minimum_age_ck check
((dateOfBirth >= add_months(dateOfBirth, -18)));
这
alter table staff
add constraint maximum_age_ck check
((dateOfBirth <= add_months(date_of_birth, 60)));
将尝试插入值和检查约束是有效的。
同时通过插入值检查上述答案证明它是无效的。我也试过使用这个 ALTER TABLE STAFF ADD CONSTRAINT minimum_age_ck CHECK((months_between(sysdate,dateOfBirth)> = 240)); CHECK((MONTHS_BETWEEN(SYSDATE,DATEOFBIRTH)> = 240)) * ERROR位于第3行: ORA-02436:在CHECK约束错误地指定的日期或系统变量
是SYSDATE不是MONTHS_BETWEEN有效可用比较?
您无法在检查约束中使用sysdate。正如我对你的问题所评论的那样,检查约束只在数据改变时被评估,因此你不能在约束中使用sysdate,因为不能保证所有的数据都通过约束。在你的代码中,如果列名为“date_of_birth”,什么是“dateOfBirth”?如果它们是相同的,那么你的第一个约束就是说出生的雏形必须比它自身始终的18个月大,而且在60个月之后不到60个月,而这始终也是。这种做法都是错误的。 –
谢谢大卫阿尔德里奇。它如何构建以实现上述检查? – user2282435
- 1. 如何创建触发器以将日期时间拆分为日期
- 2. SQL orcl10g触发器插入(出生日期后的死亡日期)
- 3. cassandra触发器创建期间的java.lang.NoClassDefFoundError
- 4. Jenkins Gerrit触发器和定期创建
- 5. Linux进程产生/创建触发器
- 6. 创建在SQL Server中比较日期的触发器
- 7. MySQL - 在插入之前创建触发器来替换日期
- 8. 所有包含创建日期的表的Postgresql触发器
- 9. 根据日期创建事件触发器
- 10. 创建触发器
- 11. 创建触发器
- 12. 创建触发器
- 13. 创建触发器
- 14. 为什么在创建触发器时发生错误?
- 15. 为什么MySQL在创建触发器时发生此错误?
- 16. MySQL:如何创建设置新行的创建日期的触发器
- 17. ORA-04091创建触发器时出错
- 18. 创建触发器时出错
- 19. 触发器创建给出了错误
- 20. JSF:如何创建自定义验证器到出生日期?
- 21. SQL到期日期触发器
- 22. 如何使用mysql为表日志创建触发器?
- 23. 为“插入前”创建触发器
- 24. 如何为mysql 5.5.44创建触发器?
- 25. MySQL为选择列创建触发器
- 26. 为MYSQL触发器创建查询
- 27. 为SQLAgentMail创建插入触发器
- 28. 为高速列创建触发器
- 29. 如何创建触发器以便在发生空值时发出消息
- 30. Sql创建触发器
这将是很高兴看到你已经尝试过什么,你有什么问题,但它是星期五(谢谢你),我感到慷慨,所以[这个答案](http://stackoverflow.com/a/12364681/266304)应该给你一个很好的起点。 –
由于年龄变化而数据并未发生变化,因此您无法对出生日期的上限作为触发条件实施有意义的限制。因此,人们变成60岁,没有失职提出。换句话说,这里教的是语法(可以从手册中获得),而不是任何类型的软件开发方法。 –