sql – 出生日期的CHECK约束?
发布时间:2021-05-18 10:34:43 所属栏目:MsSql教程 来源:网络整理
导读:我在Oracle中创建了我的员工表,并且我想在emp_date中创建它,所以出生日期不会再回到过去,也不能在将来设置? 这在CREATE TABLE语句中实现太复杂了吗?如果是这样,那么我想我必须跳过它,因为这是我必须创建约束的部分. ,emp_dob DATE NOT NULL CREATE TABLE
我在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; (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 可以在一台SQL服务器上放置的数据库数量有限
- SQL Server怎样做分离与附加数据库的操作?
- sql实现跨数据库数据同步的方法是什么?
- 如果数据库表更新/插入,如何让Windows C#控件自动更新?
- SQL数据操作语句你了解多少?
- sql-server – 用户定义函数的优化问题
- sql-server-2005 – 在SQL Server 2005中分析非常大的结果集
- sql-server – 选择所有记录,如果存在连接,则连接表A,否则连
- sql-server – SQL Server:XPATH查询失败
- sql-server – 链接服务器问题.无法使用Windows身份验证作为
站长推荐
- sql-server – 在不返回任何行的查询中包含ORDER
- sql-server-2008 – 查找导致等待的查询
- sql-server – 为什么我需要两个SQL Server Serv
- sql-server – SQL Server CASE语句是否评估所有
- SQL的truncate和delete的区别是什么?
- sql-server – 什么时候应该指定PAD_INDEX?
- SQLServer Execpt和not in 性能差异
- sql-server – Transact-SQL查询中字符串前的N前
- sql-server – 将SQL Server实例根目录放在单独的
- sql-server – 使用T-SQL测试字符串是否为回文结
热点阅读