首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

一个容易触发器报错

2013-04-09 
一个简单触发器报错--案例 : 星期一到星期五 早上8:00到晚上10:00期间不能对表dept进行相关dml操作create

一个简单触发器报错
--案例 : 星期一到星期五 早上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;

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

热点排行