欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

刚学触发器遇到的尴尬有关问题

更新时间: 2014-01-05 02:14:11 责任编辑: Author_N1

 

刚学触发器遇到的尴尬问题
我定义了一个触发器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
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:11
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7322/
本文WWW.DOC100.NET DOC100.NET版权所有。