Sql 我正在尝试添加检查约束以检查年龄和出生日期
但这个查询不起作用。Sql 我正在尝试添加检查约束以检查年龄和出生日期,sql,oracle,Sql,Oracle,但这个查询不起作用。 请帮我解决您遗漏了圆函数的一个参数 CREATE TABLE "TEST"."AB_EMPLOYEE22" ( "NAME" VARCHAR2(20 BYTE), "AGE" NUMBER, "SALARY" NUMBER, "DOB" DATE ) alter table "TEST"."AB_EMPLOYEE22" add constraint Age_check check((ROUND((sysdate-DOB)
请帮我解决您遗漏了圆函数的一个参数
CREATE TABLE "TEST"."AB_EMPLOYEE22"
( "NAME" VARCHAR2(20 BYTE),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE
)
alter table "TEST"."AB_EMPLOYEE22" add constraint
Age_check check((ROUND((sysdate-DOB)/365)) = AGE) ENABLE
您遗漏了round函数的一个参数
CREATE TABLE "TEST"."AB_EMPLOYEE22"
( "NAME" VARCHAR2(20 BYTE),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE
)
alter table "TEST"."AB_EMPLOYEE22" add constraint
Age_check check((ROUND((sysdate-DOB)/365)) = AGE) ENABLE
您遗漏了round函数的一个参数
CREATE TABLE "TEST"."AB_EMPLOYEE22"
( "NAME" VARCHAR2(20 BYTE),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE
)
alter table "TEST"."AB_EMPLOYEE22" add constraint
Age_check check((ROUND((sysdate-DOB)/365)) = AGE) ENABLE
您遗漏了round函数的一个参数
CREATE TABLE "TEST"."AB_EMPLOYEE22"
( "NAME" VARCHAR2(20 BYTE),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE
)
alter table "TEST"."AB_EMPLOYEE22" add constraint
Age_check check((ROUND((sysdate-DOB)/365)) = AGE) ENABLE
不可能在约束中使用诸如“Sysdate”之类的系统变量。 链接:
建议使用具有相同逻辑的触发器不可能在约束中使用“Sysdate”等系统变量。 链接:
建议使用具有相同逻辑的触发器不可能在约束中使用“Sysdate”等系统变量。 链接:
建议使用具有相同逻辑的触发器不可能在约束中使用“Sysdate”等系统变量。 链接: 建议使用具有相同逻辑的触发器。免责声明:这不是问题的直接答案 现在,不要在表中存储派生的、最重要的是不断变化的数据,例如
age
。而是在查询时动态计算(例如,使用视图)
以下是演示免责声明:这不是对问题的直接回答
现在,不要在表中存储派生的、最重要的是不断变化的数据,例如age
。而是在查询时动态计算(例如,使用视图)
以下是演示免责声明:这不是对问题的直接回答
现在,不要在表中存储派生的、最重要的是不断变化的数据,例如age
。而是在查询时动态计算(例如,使用视图)
以下是演示免责声明:这不是对问题的直接回答
现在,不要在表中存储派生的、最重要的是不断变化的数据,例如age
。而是在查询时动态计算(例如,使用视图)
下面是演示忘记使用SYSDATE,因为它无效,或者使用触发器作为解决方法。我会给你看一个便宜的把戏 将sysdate写入列并使用它进行验证。此列可能是您的审核列(例如:创建日期)
忘记使用SYSDATE,因为它无效,或者使用触发器作为解决方法。我会给你看一个便宜的把戏 将sysdate写入列并使用它进行验证。此列可能是您的审核列(例如:创建日期)
忘记使用SYSDATE,因为它无效,或者使用触发器作为解决方法。我会给你看一个便宜的把戏 将sysdate写入列并使用它进行验证。此列可能是您的审核列(例如:创建日期)
忘记使用SYSDATE,因为它无效,或者使用触发器作为解决方法。我会给你看一个便宜的把戏 将sysdate写入列并使用它进行验证。此列可能是您的审核列(例如:创建日期)
不能在检查约束中使用SYSDATE。根据Oracle文档- 无法设置检查约束的条件 包含以下构造:
- 子查询和标量子查询表达式
- 对非确定性函数的调用(当前日期,
当前时间戳,DBTIMEZONE,
LOCALTIMESTAMP,SESSIONTIMEZONE,
SYSDATE、系统时间戳、UID、用户和 用户环境) - 对用户定义函数的调用
- REF列的取消引用(例如,使用DEREF函数)
- 嵌套表列或属性
- 伪列CURRVAL、NEXTVAL、LEVEL或ROWNUM
- 未完全指定的日期常量
Trigger
获得所需的输出。以下是触发器,它将根据您的要求正常工作:
CREATE TABLE "AB_EMPLOYEE22"
(
"NAME" VARCHAR2 ( 20 BYTE ),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE,
"DOJ" DATE DEFAULT SYSDATE
);
Table Created
ALTER TABLE "AB_EMPLOYEE22" ADD CONSTRAINT
AGE_CHECK CHECK((ROUND((DOJ-DOB)/365)) = AGE) ENABLE;
Table Altered
创建或替换触发器测试检查日期
在插入或更新AB_员工之前22
每行
开始
IF(ROUND((sysdate nvl(:NEW.DOB,:OLD.DOB))/365)nvl(:NEW.AGE,:OLD.AGE))
然后
提出申请错误(-20001,“您的出生日期和年龄不匹配”);
如果结束;
结束;
如果您发现此触发器有任何困难,请随时写评论。您不能在检查约束中使用SYSDATE。根据Oracle文档- 无法设置检查约束的条件 包含以下构造:
- 子查询和标量子查询表达式
- 对非确定性函数的调用(当前日期,
当前时间戳,DBTIMEZONE,
LOCALTIMESTAMP,SESSIONTIMEZONE,
SYSDATE、系统时间戳、UID、用户和 用户环境) - 对用户定义函数的调用
- REF列的取消引用(例如,使用DEREF函数)
- 嵌套表列或属性
- 伪列CURRVAL、NEXTVAL、LEVEL或ROWNUM
- 未完全指定的日期常量
Trigger
获得所需的输出。以下是触发器,它将根据您的要求正常工作:
CREATE TABLE "AB_EMPLOYEE22"
(
"NAME" VARCHAR2 ( 20 BYTE ),
"AGE" NUMBER,
"SALARY" NUMBER,
"DOB" DATE,
"DOJ" DATE DEFAULT SYSDATE
);
Table Created
ALTER TABLE "AB_EMPLOYEE22" ADD CONSTRAINT
AGE_CHECK CHECK((ROUND((DOJ-DOB)/365)) = AGE) ENABLE;
Table Altered
创建或替换触发器测试检查日期
在插入或更新AB_员工之前22
每行
开始
IF(ROUND((sysdate nvl(:NEW.DOB,:OLD.DOB))/365)nvl(:NEW.AGE,:OLD.AGE))
然后
提出申请错误(-20001,“您的出生日期和年龄不匹配”);
如果结束;
结束;
如果您发现此触发器有任何困难,请随时写评论。您不能在检查约束中使用SYSDATE。根据Oracle文档- 无法设置检查约束的条件 包含以下构造:
- 子查询和标量子查询表达式
- 调用