es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PLS-00103: Se encontró el símbolo “SELECT” en Oracle SQL Developer.

Tengo estas tablas:

Member(ID_miembro nombre, apellido)

Perfil(ID_miembro nombre_perfil)

Película(ID_película título, año, productor, promedio_calificación)

Actor(ID_actor, nombre, apellido)

Actuado_en(ID_película, ID_actor)

Visto(ID_miembro, nombre_perfil, ID_película, calificación)

Para cada relación, el o los atributos de la clave primaria están subrayados. Además, se cumplen las siguientes restricciones de clave foránea:

En Perfil,

Clave foránea: ID_miembro hace referencia a Member(ID_miembro)

En Actuado_en,

Clave foránea: ID_película hace referencia a Película(ID_película)
Clave foránea: ID_actor hace referencia a Actor(ID_actor)

En Visto,

Clave foránea: (ID_miembro, nombre_perfil) hace referencia a Perfil(ID_miembro, nombre_perfil)
Clave foránea: ID_película hace referencia a Película(ID_película)

Mi tarea fue: Escribir un trigger que actualice automáticamente el atributo “promedio_calificación” cada vez que se inserte una nueva tupla en Visto. Llegué a esto pero hubo un error al compilar que decía:

PLS-00103: Encontrado el símbolo “SELECT”


create trigger trig1
after insert on Visto
for each row
when (new.ID_película is not null)
begin
update Película
set promedio_calificación = (select avg(W.calificación)
from Visto W
where W.ID_película = new.ID_película);
end;

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el disparador es que hay un error tipográfico en la línea donde se establece la calificación promedio. Debería decir “avg_rating” en lugar de “ava_rating”. El código corregido del disparador es el siguiente:

    crear disparador trig1
        después de insertar en Watch
        para cada fila
        cuando (new.movie_ID no es nulo)
        comenzar
            actualizar Película
            establecer avg_rating = (select avg(W.rating)
                              from Watch W
                              where W.movie_ID = new.movie_ID);
        fin;
    

    Este disparador actualizará la calificación promedio para la película en la tabla Película cada vez que se inserte una nueva tupla en la tabla Watch. El disparador recupera la calificación promedio para la película de la tabla Watch y la establece en la fila correspondiente en la tabla Película.

Comments are closed.