日期:2014-05-17  浏览次数:20855 次

刚学触发器遇到的尴尬问题
我定义了一个触发器trg_myemp,禁止在工作时间(9点到17点)修改表信息,但是为什么还是能删除表中的行
或者插入新的行都可以啊?(我操作是在9点到17点进行的,系统时间也没错)
后来我把between 改成 not between就可以了,感觉不符合逻辑啊,有大神可以解释一下吗?
下面是代码:
CREATE OR REPLACE TRIGGER trg_emp
    BEFORE INSERT OR UPDATE OR DELETE ON emp
  BEGIN
    IF(TO_CHAR(SYSDATE, 'HH24')) BETWEEN '9' AND '17' THEN
      RAISE_APPLICATION_ERROR(-20000, '在工作时间不能改变表信息');
    END IF;
  END trg_emp;
/

DELETE FORM emp WHERE ename='SMITH';

INSERT INTO myemp(empno,ename,job,mgr,sal,comm,deptno)values(8881,'xzh2','salesman',7698,1600.00,100.00,30);
触发器

------解决方案--------------------
between '9' and '17'

between 9 and 17
不是一回事

------解决方案--------------------

extract(hour from cast(sysdate as timestamp))  between 9 and 17
 
------解决方案--------------------
引用:
Quote: 引用:


extract(hour from cast(sysdate as timestamp))  between 9 and 17
 
阁下的方法能用,但是(TO_CHAR(SYSDATE, 'HH24')) 这个方法怎么样才能行得通呢?

就像1楼说的  between 9 and 17 是数字9到17范围。
可是字符串between '9' and '17' 是不可能出结果的,因为字符串‘17’<'9'
因为字符串的排序时‘1’ ‘17’ ‘2’ ‘234’ ‘9’ 这种的
to_number(TO_CHAR(SYSDATE, 'HH24'))  between 9 and 17