刚学触发器遇到的尴尬问题 我定义了一个触发器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
------解决方案--------------------
就像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