请教建表时约束条件限制日期的问题
oracle约束条件里不允许使用sysdate
我现在的要求是要约束字段paydate 不可大于当前年月,不可小于2006年1月
不知道怎么写

解决方案 »

  1.   

    在界面程序(如.net,PB)中使用程序进行约束控制也可以。
      

  2.   

    用check是最麻烦的。因为列值对sysdate是变化的。插入是可能大于sysdate,但后来就会小于sysdate。
    看看这篇文章:http://203.208.37.104/search?q=cache:mCFUEUDkT1MJ:rwijk.blogspot.com/2007/12/check-constraints-with-sysdate.html+oracle+check+sysdate&hl=zh-CN&ct=clnk&cd=1&gl=cn&st_usg=ALhdy284Y29JLMCQuoYAHeHwd4HXJNgZuA
      

  3.   

    试试:
    加入一个新列,设置列default值为sysdate,然后check可以引用该列的值进行比较.
      

  4.   

    我的点观点是在数据库端建这个check约束,但好像大的应用中把外键、check这些约束都去掉的,说是为了性能原因。
      

  5.   

    不可以直接建约束小于sysdate。看来最好的办法还是用触发器!
      

  6.   

    触发器和 约束都是保证数据完整性的;
    check应该比 触发器简单一些,但是最好建表的时候就写好,那样以免后面出现垃圾数据,但是这样也使得数据的插入更新遇到了问题
    触发器可以在中途使用,以便规范以后插入或更新的数据。