Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/01/2017, 05:49
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Trigger sobre día de la semana

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 original
  1. IF v_Fecha LIKE 'SÁBADO' OR v_Fecha LIKE 'DOMINGO' THEN

Y asi tomas el valor que deseas:

Código SQL:
Ver original
  1. SELECT 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 original
  1. CREATE OR REPLACE TRIGGER TR_Dias_Tutorias
  2. AFTER INSERT OR UPDATE OF Fecha ON Tutorias
  3. FOR EACH ROW
  4. DECLARE
  5.     v_Fecha DATE := :NEW.Fecha;
  6.     v_Dia VARCHAR2(20);
  7. BEGIN
  8.     SELECT TO_CHAR(v_Fecha, 'D') INTO v_Dia FROM Dual;
  9.     IF v_Fecha IN (1, 7) THEN
  10.         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');
  11.     END IF;
  12. 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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)