Как записать сообщение об ошибке и как объединить данные записей об ошибках в таблицу

#sql #oracle #plsql #concatenation #error-messaging

Вопрос:

У меня есть код как часть проекта. Код подтверждает приведенные ниже условия.

  • Проверьте, является ли пункт no нулевым
  • Проверьте, равна ли длина номера товара 5 символам
  • Проверьте, является ли описание элемента пустым
  • Проверьте, не содержит ли описание товара менее 240 символов.

код проверит все вышеперечисленные условия для каждой записи таблицы. Если какая-либо из вышеперечисленных проверок завершится неудачно для какой-либо записи, статус этой конкретной записи изменится на «V», и будет выведено сообщение об ошибке, в котором отобразится сообщение об ошибке, при котором условие вышеупомянутой проверки не выполнено.

Например: Для конкретной записи, если элемент no равен нулю, то статус конкретной записи будет обновлен до «V», а сообщение об ошибке будет напечатано как «Элемент No равен нулю, поэтому статус обновлен до V».

Теперь у меня есть приведенный ниже сценарий для работы

  1. Создайте таблицу error_log с последовательностью_но, error_message и error_data.
  2. Сообщение об ошибке будет содержать фактическое сообщение об ошибке, а данные об ошибке будут иметь объединенное значение всех данных.
  3. При возникновении ошибки сообщение об ошибке должно быть записано в таблицу error_log в столбце error_message, а error_data должно содержать объединенное значение всех столбцов,т. е. error_data должны содержать объединенные данные столбцов записи, для которой проверка не удалась.

Не могли бы вы, пожалуйста, помочь мне, как записать сообщение об ошибке в таблицу error_log и как объединить данные столбцов записей об ошибках в столбце error_data таблицы error_message

Комментарии:

1. Может ли кто-нибудь, пожалуйста, помочь в предоставлении решения для достижения вышеуказанного сценария

2. «Может ли кто-нибудь, пожалуйста, помочь в предоставлении решения для достижения вышеуказанного сценария» Терпение, Кузнечик. Вы опубликовали это заявление всего через час после публикации первоначального вопроса. Это глобальный форум. Человек, обладающий информацией, которую вы ищете, возможно, будет жить в 12 часовых поясах от вас и собирался лечь спать, как вы и написали. Все участники-волонтеры области.

3. @NaveenRagam . . . С чего бы вам с самого начала допускать в таблицу неверные данные? Все эти условия могут быть легко обеспечены с помощью check ограничений.

Ответ №1:

Сценарий, который вы описываете, лучше всего будет реализован с помощью правильного дизайна таблицы и использования ограничений, которые будут постоянно обеспечивать соблюдение этих условий. Определите длину столбцов в соответствии с вашими требованиями (5 символов, 240 символов) или с ограничениями, не равными НУЛЮ, и вам никогда не понадобится подобная процедура. Если это невозможно, то подумайте, что простая INSERT as SELECT команда может сделать то, что вы описываете:

 insert into error_table 
       (error_date, error_pk, error_message) 
       select sysdate, [data_table.primary_key], 'field A is too long' 
         from data_table where length(field_a) > 5;
 

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