Я хочу предотвратить удаление номера телефона, если в данный момент в таблице только один номер.
Пока у меня есть этот триггер:
CREATE OR REPLACE TRIGGER T_TfnoCliente_Cliente
BEFORE DELETE ON TFNO_CLIENTE
FOR EACH ROW
DECLARE
--PRAGMA AUTONOMOUS_TRANSACTION;
telefonosClienteAtencion NUMBER;
BEGIN
telefonosClienteAtencion := 0;
SELECT count(1) INTO telefonosClienteAtencion FROM TFNO_CLIENTE WHERE id = :old.id AND tipo = :old.tipo;
IF telefonosClienteAtencion < 2 THEN
RAISE_APPLICATION_ERROR(-20101, 'Cannot delete a phone number if the user doesn't have more than one phone associated');
END IF;
END;
Я получаю ошибку ORA-04091: таблица TFNO_CLIENT мутирует (...)
Я понимаю проблему , и я попробовал несколько альтернатив:
Pragma autpendent_transaction. Это вызывает сбои в работе, и я хотел бы избежать этого в максимально возможной степени.
Вместо запроса самой таблицы, запрос представления, содержащего счет:
Затем я изменил запрос на
SELECT no_tfnos INTO telefonosClienteAtencion FROM CLIENTES_TFNOS WHERE cliente = :old.id;
CREATE OR REPLACE VIEW CLIENTES_TFNOS (cliente, no_tfnos) AS
SELECT id, count(*)
from TFNO_CLIENTE
group by id;
Это тоже не сработало.
Есть ли способ решить эту проблему легко? Спасибо!