所以我触发如下
create or replace TRIGGER TWELVE_ONE BEFORE INSERT OR UPDATE OR DELETE ON ORDERS FOR EACH ROW DECLARE V_DAY VARCHAR2 (10); MyException exception; BEGIN SELECT TO_CHAR (SYSDATE, 'DAY') INTO V_DAY FROM DUAL; DBMS_OUTPUT.PUT_LINE(V_DAY); IF (V_DAY='SUNDAY') THEN raise_application_error(-20001, 'Today is Sunday. Order table cannot be altered'); end if; END;
这应该防止UPDATE
,INSERT
并且DELETE
如果系统一天SUNDAY
.从逻辑上讲,它似乎是正确的,但不幸的是它仍然允许插入.我在这做错了什么?我正在使用SQL Developer请帮助非常感谢
to_char(sysdate, 'day')
生成一个空格填充到最长日期的字符串(如果您的语言是英语,那么处理字符串"星期三"将是9个字符).这是因为在过去的日子里,你有固定宽度的文本报告,你希望每个值都有相同的宽度.
您可以在比较之前修剪该值.但更优雅的方法是fm
在你的使用修饰符to_char
.这会阻止Oracle默认为空白填充.您可以使用此基本上任何格式掩码,空白填充结果.
v_day := to_char( sysdate, 'fmDAY' )