基于系统时间触发(DAY)

Trigger based on system time (DAY)

所以我有如下触发器

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;

如果系统日是 SUNDAY,应该防止 UPDATEINSERTDELETE。在我看来,这在逻辑上似乎是正确的,但不幸的是它仍然允许插入。我在这里做错了什么?我正在使用 SQL 开发人员 请帮忙 非常感谢

to_char(sysdate, 'day') 生成一个用空白填充到最长一天的长度的字符串(如果您的语言是英语,那么处理字符串 "Wednesday" 需要 9 个字符)。这是因为在过去,您会有固定宽度的文本报告,并且您希望每个值都具有相同的宽度。

您可以 trim 比较之前的值。但更优雅的方法是在 to_char 中使用 fm 修饰符。这会阻止 Oracle 默认使用空白填充。您可以将它与基本上任何格式掩码一起使用,以空白填充结果。

v_day := to_char( sysdate, 'fmDAY' )