加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 出生日期的CHECK束缚?

发布时间:2021-05-17 08:22:29 所属栏目:编程 来源:网络整理
导读:我在Oracle中建设了我的员工表,而且我想在emp_date中建设它,以是出生日期不会再回到已往,也不能在未来配置? 这在CREATE TABLE语句中实现太伟大了吗?假如是这样,那么我想我必需跳过它,由于这是我必需建设束缚的部门. ,emp_dob DATE NOT NULL CREATE TABLE em

我在Oracle中建设了我的员工表,而且我想在emp_date中建设它,以是出生日期不会再回到已往,也不能在未来配置?

这在CREATE TABLE语句中实现太伟大了吗?假如是这样,那么我想我必需跳过它,由于这是我必需建设束缚的部门.

,emp_dob DATE NOT NULL

    CREATE TABLE employee(emp_id NUMBER(4) PRIMARY KEY,emp_name VARCHAR2(40) NOT NULL,emp_address VARCHAR2(60) NOT NULL,emp_tel NUMBER(11) NOT NULL,CONSTRAINT emp_tel_length CHECK (LENGTH(emp_tel) BETWEEN 9 and 11),emp_dob DATE NOT NULL,CONSTRAINT check_date_of_birth CHECK (emp_dob BETWEEN DATE '1950-01-01' AND sysdate))

办理要领

搜查束缚必需是确定性的.也就是说,特定行必需始终满意束缚,不然它必需始终无法满意束缚.可是,因为返回值不绝变革,因此SYSDATE本质上是不确定的.因此,您无法界说挪用SYSDATE或任何其他用户界说函数的CHECK束缚.

假如您实行在束缚界说中引用SYSDATE,则会呈现错误

SQL> ed
Wrote file afiedt.buf

  1  create table t(
  2      birth_date date check( birth_date between date '1900-01-01' and
  3                                                sysdate )
  4* )
SQL> /
                                              sysdate )
                                              *
ERROR at line 3:
ORA-02436: date or system variable wrongly specified in CHECK constraint

您可以建设一个CHECK束缚,个中最小和最大日期都是硬编码的,但这不是出格适用,由于您必需不绝删除并从头建设束缚.

SQL> ed
Wrote file afiedt.buf

  1   create table t(
  2       birth_date date check( birth_date between date '1900-01-01' and
  3                                                 date '2011-12-08' )
  4*  )
SQL> /

Table created.

逼迫执行此类要求的现实要领是在表上建设触发器

CREATE OR REPLACE TRIGGER check_birth_date
  BEFORE INSERT OR UPDATE ON employee
  FOR EACH ROW
BEGIN
  IF( :new.emp_dob < date '1900-01-01' or 
      :new.emp_dob > sysdate )
  THEN
    RAISE_APPLICATION_ERROR( 
      -20001,'EMployee date of birth must be later than Jan 1,1900 and earlier than today' );
  END IF;
END;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读