Oracle
 sql >> база данни >  >> RDS >> Oracle

ORACLE След задействане на актуализацията:разрешаване на грешка при мутиращата таблица на ORA-04091

„Има ли някакъв начин да се избегне грешката в мутиращата таблица, без да се използва временна таблица за стойности или автономна транзакция?“

tl;dr не.

Грешката в мутиращата таблица е причинена от запитване на таблицата, която притежава тригера, или таблици, които са включени във връзка с външен ключ със собствената таблица (поне в по-старите версии на базата данни, не съм сигурен дали все още получава).

При правилно проектирано приложение това не трябва да е необходимо. Ето защо много хора разглеждат мутиращите таблици като индикатор за лошо моделиране на данни. Например, мутацията често е свързана с недостатъчна нормализиране.

Да перифразирам Джейми Завински:Някои хора, когато се сблъскат с изключение на мутираща таблица, си мислят „Знам, ще използвам автономни транзакции“. Сега те имат два проблема.

Понякога грешката може да бъде избегната чрез просто модифициране на стойностите :NEW в тригер BEFORE INSERT OR UPDATE или чрез използване на виртуални колони. Но ще трябва да публикувате повече подробности, за да видите дали те са приложими.

Но най-доброто решение е да не се нуждаете от друг вид.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция ADD_MONTHS() в Oracle

  2. Как да проверя дали курсорът връща записи в oracle?

  3. Тип данни на Oracle:Трябва ли да използвам VARCHAR2 или CHAR

  4. Как SID се различава от името на услугата в Oracle tnsnames.ora

  5. Еквивалент на външни таблици на Oracle в SQL Server