как исправить ошибку мутирования таблицы в oracle? [Дубликат]

Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:

Предположим, что у вас есть класс с именем Student.

public class Student
{
    private string FirstName;
    private string LastName;
    public string GetFullName()
    {
        return FirstName + LastName;
    }
}

Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.

public class StudentInfo
{      
    public string GetStudentName()
    {
        Student s;
        string fullname = s.GetFullName();
        return fullname;
    }        
}

Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.

3
задан APC 2 August 2011 в 17:54
поделиться

1 ответ

«Есть ли способ избежать ошибки мутирующей таблицы без использования временной таблицы для значений или автономной транзакции?»

tl; dr no.


Ошибка мутирующей таблицы вызвана запросом таблицы, которая владеет триггером, или таблицами, которые связаны с отношением внешнего ключа с таблицей владения (по крайней мере, в более старых версиях базы данных, не уверен, приобретения).

В правильно спроектированном приложении это не обязательно. Именно поэтому многие считают, что мутационные таблицы являются индикатором плохого моделирования данных. Например, мутация часто связана с недостаточной нормировкой.


Перефразируя Джейми Завински: Некоторые люди, столкнувшись с исключением из мутировавшего стола, думают: «Я знаю, я буду использовать автономные транзакции». Теперь у них есть две проблемы.


Иногда ошибки можно избежать, просто изменив значения: NEW в триггере ДОПОЛНИТЕЛЬНОЕ ИЛИ ОБНОВЛЕНИЕ или используя виртуальные столбцы. Но вам нужно будет опубликовать более подробную информацию, чтобы узнать, применимы ли они.

Но лучшее обходное решение не нуждается в каком-либо другом виде.

9
ответ дан APC 24 August 2018 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: