检查约束,一个表(列)中的日期是否适合另一表(列)中的日期

克莱德

假设我有以下两个表。

create table contract(
 c_ID       number(1) primary key,
 c_name     varchar2(50) not null,
 start        date not null,
 end          date not null,
 d_ID       number(1) null,
 constraint fk_discount_ID
 foreign key(d_ID) references discount(d_ID)
);

create table discount(
 d_ID   number(1) primary key not null,
 d_amount decimal(4,2) not null,
 valid_from    date,
 valid_until   date
);

现在,我想添加一个约束,以检查折扣在合同开始日期是否有效。例如,一份合同于2015年5月1日开始,并且折扣仅在2015年4月30日有效,而该折扣不适用于上述合同。

我该怎么做约束?

托尼·安德鲁斯

不幸的是,您不能使用约束执行这种复杂的验证。

虽然实际上有一种方法可以结合使用实例化视图约束(请参阅我的博客),但我们通常不这样做,因为这可能会对性能产生不利影响。

触发器是一个选项,但是我会避免使用它们,因为它们很难正确使用,因此它们始终可以在多用户系统中正常工作。

这留下了最常见的方法(以我的经验):为执行业务规则的事务构建PL / SQL API,以便contract像在应用程序中插入一行一样简单地调用API,如下所示:

contract_api.create_contract 
   ( p_name => :name
   , p_start => :start
   , p_d_id => :d_id
   ...
   );

该API在插入之前会验证业务规则,因此该调用可能会失败,并出现以下异常:

ORA-20001: Discount not valid on contract start date

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查日期是否与同一表中的日期重叠

来自分类Dev

用R数据检查一个表(X)中的值是否在另一表(Y)中两列的值之间。

来自分类Dev

根据另一个表中的列值对列使用检查约束

来自分类Dev

按多列显示一个表中不在另一表中的记录

来自分类Dev

mysql在一个表中获取行,在另一表中获取日期,但是一年不行

来自分类Dev

根据另一个表中列的结果在查询中更改日期

来自分类Dev

如何:将一个表中的一列联接到另一表中的2列?

来自分类Dev

MySQL查询以查找一个表中一列的值是否在另一表中两列的两个值之间

来自分类Dev

SQL:将一个表中的2列合并以与另一表中的1列进行比较

来自分类Dev

按日期获取最新行,但按另一个表中的列分组

来自分类Dev

使用date_add()在同一表中添加日期列和另一列

来自分类Dev

SQL从一个表中选择两列,再从另一表中的列转换

来自分类Dev

SQL约束,用于检查另一个表中是否不存在值

来自分类Dev

计算从一个表到另一表的一列中多行的值

来自分类Dev

根据位置将一个表的列安排为Microsoft SQL Server中另一表中的行

来自分类Dev

SQL查询以从一个表中获取数据,其中特定列等于另一表中的值

来自分类Dev

SQL使用一个表中的行数据从另一表中的特定列中选择数据

来自分类Dev

C#Lambda将一个表中的多列连接到另一表中的单列

来自分类Dev

比较 SQL Server 中一个表中的列名与另一表中的列数据

来自分类Dev

如何在SQLITE中从一个表中获取所有列,并从另一表中获取一个列

来自分类Dev

在where子句中将一个表中的日期与另一个表中的列一起使用

来自分类Dev

SQL是如何从另一个表的日期时间范围中获取表的列的值吗?

来自分类Dev

SQL是如何从另一个表的日期时间范围中获取表的列的值吗?

来自分类Dev

可以在一个表中检查是否在另一个表的列中有一个属性吗?

来自分类Dev

从一个表中选择记录,并使用另一表中的列对结果进行排序

来自分类Dev

检查日期列是否在某个取决于另一个日期列的时期

来自分类Dev

SQL根据另一个表中的日期范围查找日期在表中的位置

来自分类Dev

仅当使用MySQL的一个表中的列值与另一表中的列值相同时,才如何从两个表返回数据?

来自分类Dev

在MySQL中,如何从一个表中获取2列,并在一行中从另一表中获取2行,作为另一表中的列?

Related 相关文章

  1. 1

    检查日期是否与同一表中的日期重叠

  2. 2

    用R数据检查一个表(X)中的值是否在另一表(Y)中两列的值之间。

  3. 3

    根据另一个表中的列值对列使用检查约束

  4. 4

    按多列显示一个表中不在另一表中的记录

  5. 5

    mysql在一个表中获取行,在另一表中获取日期,但是一年不行

  6. 6

    根据另一个表中列的结果在查询中更改日期

  7. 7

    如何:将一个表中的一列联接到另一表中的2列?

  8. 8

    MySQL查询以查找一个表中一列的值是否在另一表中两列的两个值之间

  9. 9

    SQL:将一个表中的2列合并以与另一表中的1列进行比较

  10. 10

    按日期获取最新行,但按另一个表中的列分组

  11. 11

    使用date_add()在同一表中添加日期列和另一列

  12. 12

    SQL从一个表中选择两列,再从另一表中的列转换

  13. 13

    SQL约束,用于检查另一个表中是否不存在值

  14. 14

    计算从一个表到另一表的一列中多行的值

  15. 15

    根据位置将一个表的列安排为Microsoft SQL Server中另一表中的行

  16. 16

    SQL查询以从一个表中获取数据,其中特定列等于另一表中的值

  17. 17

    SQL使用一个表中的行数据从另一表中的特定列中选择数据

  18. 18

    C#Lambda将一个表中的多列连接到另一表中的单列

  19. 19

    比较 SQL Server 中一个表中的列名与另一表中的列数据

  20. 20

    如何在SQLITE中从一个表中获取所有列,并从另一表中获取一个列

  21. 21

    在where子句中将一个表中的日期与另一个表中的列一起使用

  22. 22

    SQL是如何从另一个表的日期时间范围中获取表的列的值吗?

  23. 23

    SQL是如何从另一个表的日期时间范围中获取表的列的值吗?

  24. 24

    可以在一个表中检查是否在另一个表的列中有一个属性吗?

  25. 25

    从一个表中选择记录,并使用另一表中的列对结果进行排序

  26. 26

    检查日期列是否在某个取决于另一个日期列的时期

  27. 27

    SQL根据另一个表中的日期范围查找日期在表中的位置

  28. 28

    仅当使用MySQL的一个表中的列值与另一表中的列值相同时,才如何从两个表返回数据?

  29. 29

    在MySQL中,如何从一个表中获取2列,并在一行中从另一表中获取2行,作为另一表中的列?

热门标签

归档