I am having problems updating the rows of a table due to a necessary trigger that I have. The error is that of the mutant tables and I do not know how to modify my trigger so that it does not happen.
The structure of the table is as follows:
CREATE TABLE CITAS (
OID_CITA NUMBER PRIMARY KEY,
HORA VARCHAR2(5) NOT NULL,
FECHA DATE NOT NULL,
OID_CLINICA NUMBER,
USUARIO_MEDICO VARCHAR2(75) NOT NULL,
USUARIO_RECEPCIONISTA VARCHAR2(75),
DNI_PACIENTE CHAR(9),
FOREIGN KEY(OID_CLINICA) REFERENCES CLINICAS(OID_CLINICA),
FOREIGN KEY(USUARIO_MEDICO) REFERENCES MEDICOS(USUARIO),
FOREIGN KEY(USUARIO_RECEPCIONISTA)
REFERENCES RECEPCIONISTAS(USUARIO),
FOREIGN KEY(DNI_PACIENTE) REFERENCES PACIENTES(DNI)
);
The error
An error occurred while saving the changes in the "JHO" table. "QUOTES": Row 231: ORA-04091: table JHO.CITAS is mutating, trigger / function may not see it ORA-06512: at " JHO.TR_CITA_IDENTICA ", line 7 ORA-04088: error during execution of trigger 'JHO.TR_CITA_IDENTICA'
The trigger:
CREATE OR REPLACE TRIGGER TR_CITA_IDENTICA
BEFORE INSERT OR UPDATE OF USUARIO_MEDICO,FECHA,HORA ON CITAS
FOR EACH ROW
DECLARE
V_MEDICO VARCHAR(40) := :NEW.USUARIO_MEDICO;
V_FECHA DATE := :NEW.FECHA;
V_HORA VARCHAR2(20) := :NEW.HORA;
V_CUENTA NUMBER;
BEGIN
SELECT COUNT(*) INTO V_CUENTA FROM CITAS WHERE USUARIO_MEDICO = V_MEDICO
AND FECHA = V_FECHA AND HORA = V_HORA;
IF V_CUENTA > 0 THEN
RAISE_APPLICATION_ERROR(-20004,'No puede haber más de una cita de un
mismo médico para una fecha y una hora específica');
END IF;
END;
/