在SQL Developer中检查列的约束

时间:2017-05-22 08:05:15

标签: oracle check-constraint

我需要创建一个表格,其中列的值为#34; ttime"可以在10:0022:00的范围内。这里'代码:

create table test (    
  ttime date,
  CONSTRAINT CHECK_ttime CHECK(ttime >= TO_DATE('10:00', 'HH24:MI') AND
                               ttime <= TO_DATE('22:00', 'HH24:MI'))
);

但是当我创建此表时,会发生错误:

  

ORA-02436:CHECK中错误指定了日期或系统变量   约束

我该如何避免它?问题是什么?

1 个答案:

答案 0 :(得分:3)

要强制执行此类约束,您需要从execute format(...列中提取时间。将日期的时间部分(在此处表示为字符串文字ttime)转换为值'10:00'数据类型时,日期部分默认为当前月份和年份的第一天,因此{ {1}}将导致DATE,您的条件将变为

TO_DATE('10:00', 'HH24:MI')

注意:01/05/2017 10:00:00应替换为ttime >= 01/05/2017 10:00:00 and ttime <= 01/05/2017 22:00:00 AND不能小于某个值,同时大于相同的值。

话虽如此,作为其中一个选项,您可以按如下方式定义约束:

OR