MyException - 我的异常网
当前位置:我的异常网» Oracle管理 » 一个容易触发器报错

一个容易触发器报错

www.myexceptions.net  网友分享于:2013-04-10  浏览:5次
一个简单触发器报错
--案例 : 星期一到星期五 早上8:00到晚上10:00期间不能对表dept进行相关dml操作
create or replace trigger tri_dept
before
insert or delete or update on dept
begin
if(to_char(sysdate,'day') in ('星期一','星期二','星期三','星期四','星期五'))
or (to_char(sysdate,'hh24:mi')  between '08:00' and '22:00')
then
raise_application_error(-20001,'工作时间不允许对dept表进行相关操作');
end if;
end;


创建时没错,删除表dept中的数据时报错:

ORA-20001: 工作时间不允许对dept表进行相关操作
ORA-06512: 在 "SCOTT.TRI_DEPT", line 5
ORA-04088: 触发器 'SCOTT.TRI_DEPT' 执行过程中出错


没看出第5行哪里错了 求大神指点

------解决方案--------------------
估计是写惯了其他语言

create or replace trigger tri_dept
before
insert or delete or update on dept
declare
  v_flag number(1):=0;
begin

select count(*) 
into v_flag 
  FROM DUAL
 WHERE TO_NUMBER(TO_CHAR(SYSDATE, 'D')) BETWEEN 2 AND 5
   AND TO_NUMBER(TO_CHAR(SYSDATE,'HH24')) BETWEEN 8 AND 22;
if v_flag>0 then
raise_application_error(-20001,'工作时间不允许对dept表进行相关操作');
end if;
end;

------解决方案--------------------
引用:
估计是写惯了其他语言



SQL code
?



12345678910111213141516

create or replace trigger tri_dept before insert or delete or update on dept declare  v_flag number(1):=0; begin  select count(*)  into ……


我按你这个把触发器创建了  创建成功  然后对表进行更新update dept set dname ='asking' where deptno=40;  照样更新成功了!
------解决方案--------------------
create or replace trigger tri_dept
before
insert or delete or update on dept
declare
  v_flag number(1):=0;
begin

select count(*) 
into v_flag 
  FROM DUAL
 WHERE TO_NUMBER(TO_CHAR(SYSDATE, 'D')) BETWEEN 2 AND 5
   AND TO_NUMBER(TO_CHAR(SYSDATE,'HH24')) BETWEEN 8 AND 22;
if v_flag>0 then
raise_application_error(-20001,'工作时间不允许对dept表进行相关操作');
end if;
end;

红色字体部分是什么意思呀、?

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有