gpt4 book ai didi

sql - 基于系统时间触发(DAY)

转载 作者:行者123 更新时间:2023-12-04 21:51:03 25 4
gpt4 key购买 nike

所以我有如下触发器

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 Developer请帮忙非常感谢

最佳答案

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

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

v_day := to_char( sysdate, 'fmDAY' )

关于sql - 基于系统时间触发(DAY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com