SQL триггер DATEPART не объявлен - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь создать триггер, который выдает сообщение об ошибке, если текущее время между 22:00 и 6:00. Это код, который я написал:

CREATE OR REPLACE TRIGGER horarioModificar 
BEFORE UPDATE ON employees
FOR EACH ROW
DECLARE
   horaActual NUMBER:= DATEPART(hour, SYSDATETIME());
BEGIN 
    IF  horaActual < 6 OR horaActual > 22 THEN
        raise_application_error(-20250,'No se puede realizar ningún cambio entre las 22:00 y las 6:00');
    END IF;
END;
/

Я получил сообщение об ошибке, заявив, что необходимо объявить DATEPART (код ошибки PLS-00201). Кто-нибудь знает, что не так с моим кодом?

1 Ответ

1 голос
/ 10 апреля 2020

Сообщение об ошибке, которое вы получаете (PLS-00201), указывает, что вы запускаете Oracle.

Вот новая версия кода триггера, который будет работать на Oracle:

create or replace trigger horariomodificar 
before update on employees 
for each row 
begin 
    if not extract(hour from systimestamp) between 6 and 22 
        then raise_application_error(
            -20250,
            'no se puede realizar ningún cambio entre las 22:00 y las 6:00'
        ); 
    end if; 
end; 
/

Известные точки:

  • datepart() не существует в Oracle (это SQL серверная функция); вы можете использовать extract(hour from systimestamp), чтобы получить текущий час

  • вам не нужно использовать переменную, поэтому я удалил это

  • этот код фактически предотвращает изменения между 23h и 6h, а не между 22h и 6h; в противном случае вы хотите: if not extract(hour from systimestamp) not between 6 and and 21

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...