sql >> Base de Datos >  >> RDS >> Oracle

error de disparo no válido

Ok, publicaré esto como respuesta porque los comentarios no permitirán tanto texto.

Al ver sus tablas, algunas cosas aún no están claras. tu función ADD_PACIENTE_QUARTO implementa un SELECT instrucción que establece el predicado Where PAC = CONT pero PAC no está en PACIENTE es la especificación sino que es la variable local donde almacena su resultado y CONT es su parámetro, no está claro qué intentó allí.

Ahora su activador tiene algunas fallas en la lógica y la implementación.

En primer lugar, el nombre de su disparador es PACIENTE_TRIGGER pero la línea INSERT OR UPDATE ON TIPO_QUARTO me dice que está en el TIPO_QUARTO table, esto no es un problema sintácticamente, pero lógicamente puede ser un dolor de cabeza para alguien que está tratando de averiguar a qué tabla pertenece el disparador.

A continuación, use INSERT OR UPDATE OF TIPO ON TIPO_QUARTO para monitorear inserciones o actualizar cambios solo en la columna TIPO de TIPO_QUARTO mesa.

Ahora esta línea If :new.TIPO_QUARTO = 'UTI' then , asumiendo que este disparador está adjunto a TIPO_QUARTO tabla, esa tabla no tiene una columna llamada TIPO_QUARTO cambia esto a :new.TIPO .

A continuación, PAC es de tipo VARCHAR así que no me queda claro qué intentas hacer en PAC := PAC - :new.TIPO; y en PAC := PAC + :new.TIPO; ambas líneas arrojarán invalid number excepción ya que no puede sumar o restar cadenas, tal vez su intención era concatenar u obtener una subcadena.

Y por último la llamada a UPDATE TIPO_QUARTO SET TIPO = PAC dentro de un disparador para TIPO_QUARTO resultará en mutating table excepción, no puede consultar/actualizar una tabla que está en medio de una declaración DML (INSERTAR o ACTUALIZAR en este caso) para arreglar esto, simplemente puede asignar :new.TIPO := PAC .

Ocúpate de estos detalles y tal vez así tu problema no vuelva a existir.