检查日期约束

时间:2014-07-14 14:49:41

标签: sql informix check-constraints

我正在创建一个包含date列的表格。我想添加一个检查约束来验证日期是否在将来。

create table test_table (
  schedule_date date not null,
  check (schedule_date >= TODAY)
);

上面的sql给了我一个语法错误。

09:43:37  [CREATE - 0 row(s), 0.000 secs]  [Error Code: -201, SQL State: 42000]  A syntax error has occurred. 
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]

如何在日期列上添加约束?

3 个答案:

答案 0 :(得分:3)

今天你不能在检查约束中使用。 正如官方文件所述:

  

使用搜索条件定义检查约束。搜索条件不能包含用户定义的例程,子查询,聚合,主机变量或rowid。此外,条件不能包含变量内置函数CURRENT,USER,SITENAME,DBSERVERNAME或TODAY。

我认为解决方案可以使用插入/更新触发器。

答案 1 :(得分:1)

正如Copilot所说,Informix根本不允许这样做。如果任何其他RDBMS允许它,我会感到惊讶。

当你想到它时,固有的定时炸弹应该是显而易见的。插入时的行符合约束,但随着时间的推移将使约束失败。引擎如何标记出来?

解决方案是:

  • 负责创建要插入的行的应用程序负责预先验证它,或
  • 创建一个插入触发器,在触发时执行验证过程,并在行失败时引发相应的错误

答案 2 :(得分:0)

我没有要检查的informix数据库,但我认为逗号是无关的并导致语法错误。

create table test_table (
  schedule_date date not null CHECK (schedule_date >= TODAY)
);