在做培训的时候,遇到一个很奇怪的问题:在给一个table加上constraint 去验证当前时间不允许小于系统时间。
create table mytable(
id number(4),
mydate date
);
alter table mytable add constraint chk_date check (mydate >=sysdate);
出现:
ORA-02436 date or system variable wrongly specified in check constraint。
经过google和请教别人得到此问题的2个解决方法:
1. 一般方法:使用Trigger去做验证。
2. 使用Oracle Visual column去验证
方法1代码如下:
create trigger mytrigger
before insert or update on mytable
for each row
begin
if inserting or updating(mydate) then
if :new.mydate >=sysdate then
raise_application_error(-20000,'mydate must be a date in the past.');
end if;
end if;
end;
这样在做Insert和Update的时候就可以验证当前Insert的时间是否被允许了
方法2步骤如下(Oracle版本必须是11g或者以上):
Step1: 添加一个Function去验证
create or replace function fun_check_date(tmpDate date)
is
begin
RETURN CASE WHEN empdate >= SYSDATE THEN 'N' ELSE 'Y' END;
end fun_check_date;
Step2: 添加visual column
ALTER TABLE mytable ADD (mydate_in_past_ind AS (CAST (fun_check_date(mydate) as varchar2(1))));
Step3: 添加constraint
ALTER TABLE mytable ADD CONSTRAINT myck1 CHECK (mydate_in_past_ind = 'Y')
这样就可以解决在约束条件中的对sysdate的比较。
分享到:
相关推荐
### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...
### ORA-01033: Oracle 初始化或关闭中 #### 错误概述 ORA-01033 错误通常出现在尝试启动或连接到Oracle数据库时,表明数据库正处于初始化或关闭过程中。该错误可能由多种原因引起,包括但不限于数据库服务尚未...
Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...
#### 二、ORA-00132: Syntax Error or Unresolved Network Name ##### 1. 错误含义 ORA-00132错误通常出现在网络配置不正确或数据库实例无法通过网络名识别目标数据库的情况。此错误表明Oracle在尝试解析数据库服务...
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
在本文中,我们将深入探讨一个特定的Oracle数据库在Linux环境下启动失败的问题,涉及错误代码ORA-27154、ORA-27300、ORA-27301和ORA-27302,这些错误通常与系统信号量相关。此问题可能发生在尝试启动一个新的数据库...
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
在创建Oracle数据库连接时遇到的错误ORA-01017和ORA-02063涉及到用户认证问题以及Oracle数据库版本之间的差异处理。ORA-01017错误表示用户名或密码无效,登录被拒绝,而ORA-02063则通常表示在Oracle数据库之间进行...
ORACLE8I数据库应用EXP工具时ORA-06553报错的解决方法 摘要:本文主要解决ORACLE 8I数据库应用EXP工具时ORA-06553报错的问题,分析出现问题的原因,并提供了正确的解决方法和措施。 知识点1:Oracle 8I数据库EXP...
### Oracle12cRAC数据库出现ora-12520, ora-12516问题解析 #### 一、问题概述 在使用Oracle12cRAC(Real Application Clusters)数据库的过程中,可能会遇到客户端连接时出现ora-12520或ora-12516错误的问题。这两...
Oracle数据库发生ORA-04031错误原因浅析及处理 Oracle数据库是甲骨文公司提供的一种分布式数据库管理系统,以分布式数据库为核心的软件产品。它具有完整的数据管理功能,作为一个关系数据库,它是一个非常实用的...
### Oracle ORA-12518 故障处理 #### 概述 在Oracle数据库管理过程中,遇到ORA-12518错误是较为常见的问题之一。此错误通常发生在客户端试图连接到数据库服务器的过程中,当监听器无法将客户端连接顺利地移交给...
### Oracle 10g启动后报ORA-16038错误的解决方法 #### 错误概述 在启动Oracle 10g数据库时遇到ORA-16038错误,该错误通常与归档日志操作有关。具体错误信息为: ``` ORA-16038: log 1 sequence #230 cannot be ...
### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...
然而,在日常运维过程中,我们可能会遇到各种错误,比如“ORA-00702”就是其中之一。这个错误通常在尝试重启Oracle数据库服务时出现,意味着数据库实例在启动过程中遇到了问题。本文将详细介绍如何在Windows和Linux...
### 离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法 #### 概述 在Oracle数据库管理过程中,偶尔会遇到因误操作导致的数据文件出现问题的情况,例如误删除数据文件或者数据文件损坏等。这些问题可能会...