env*_*yM6 2 sql oracle oracle11g plsqldeveloper oracle-sqldeveloper
所以我触发如下
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;
Run Code Online (Sandbox Code Playgroud)
这应该防止UPDATE,INSERT并且DELETE如果系统一天SUNDAY.从逻辑上讲,它似乎是正确的,但不幸的是它仍然允许插入.我在这做错了什么?我正在使用SQL Developer请帮助非常感谢
to_char(sysdate, 'day')生成一个空格填充到最长日期的字符串(如果您的语言是英语,那么处理字符串"星期三"将是9个字符).这是因为在过去的日子里,你有固定宽度的文本报告,你希望每个值都有相同的宽度.
您可以在比较之前修剪该值.但更优雅的方法是fm在你的使用修饰符to_char.这会阻止Oracle默认为空白填充.您可以使用此基本上任何格式掩码,空白填充结果.
v_day := to_char( sysdate, 'fmDAY' )
Run Code Online (Sandbox Code Playgroud)