En primer lugar, porque el IF no lo estás haciendo sobre el la variable destino del INTO, sino sobre la variable de entrada, con la fecha...
Código SQL:
Ver originalIF v_Fecha LIKE 'SÁBADO' OR v_Fecha LIKE 'DOMINGO' THEN
Y asi tomas el valor que deseas:
Código SQL:
Ver originalSELECT TO_CHAR(v_Fecha, 'DAY', 'NLS_DATE_LANGUAGE=SPANISH') INTO v_Dia FROM Dual;
No es la misma variable, como ves.
Por otro lado es totalmente innecesario hacer comparaciones con cadenas de texto (las cuales podrían causarte problemas con los acentos), cuando puedes usar valores numéricos:
Código SQL:
Ver originalCREATE OR REPLACE TRIGGER TR_Dias_Tutorias
AFTER INSERT OR UPDATE OF Fecha ON Tutorias
FOR EACH ROW
DECLARE
v_Fecha DATE := :NEW.Fecha;
v_Dia VARCHAR2(20);
BEGIN
SELECT TO_CHAR(v_Fecha, 'D') INTO v_Dia FROM Dual;
IF v_Fecha IN (1, 7) THEN
RAISE_APPLICATION_ERROR(-20020, 'Los días de la semana en dónde se puede realizar una tutoría deben estar entre lunes y viernes');
END IF;
END;
Adicionalmente, LIKE se usa para cadenas de texto en consulta
por patrones y no por igualdades. No tiene la misma logica interna en Oracle, no se usan para las mismas cosas, y la performance puede ser pésima siendo usada de modo inadecuado.