ОБРАБОТКА ОШИБОК и загрузка в целевую таблицу с использованием SQL - PullRequest
0 голосов
/ 17 мая 2018

Сегодня у меня есть сценарий, где я немного застрял.У меня есть данные, подобные приведенным ниже, в моей исходной исходной таблице Oracle (пример данных)

ID,NAME,SALARY,BIRTHDAY
1,ABHIJIT,2000,17/12/1990
2,ROHIT,-2000,13/11/1988
3,MOHIT,500,2075-575-43

Теперь зарплата во 2-й строке является отрицательной, а ДЕНЬ РОЖДЕНИЯ в 3-й строке является недопустимым форматом (действительным является MM / dd /гггг).2-я и 3-я строки должны идти в INVALID_EMPLOYEE, а 1-я запись должна идти в VALID_EMPLOYEE.В исходном файле дата форматируется как дд / мм / гггг.Который я должен преобразовать в формат MM / dd / yyyy, а также должен проверить, является ли формат даты входящего в исходный файл дд / мм / гггг или нет.Зарплата не должна быть меньше 0. Исходная таблица Все столбцы в строке и в целевой таблице ID - целое число, NAME - VARCHAR2 (255), SALARY - NUMBER и BIRTHDAY - DATE.Я обработал все это в своем Project ETL Tool.Поэтому я пытаюсь продвинуть все это в Query для улучшения производительности. Любая помощь очень ценится

1 Ответ

0 голосов
/ 17 мая 2018

Хотя записи ошибок в идеале должны обрабатываться процессом, выполняющим вставку, во многих случаях это может оказаться невозможным.Вместо этого вы можете установить ограничения для таблицы для столбца Зарплата.Проверка даты может быть реализована простым наличием столбца типа данных date.Затем создайте таблицу регистрации ошибок для регистрации ошибок.

Теперь нам нужна таблица для записи ваших недействительных записей.Для этого у вас есть два варианта.Вы можете иметь таблицу INVALID_EMPLOYEES в качестве таблицы ошибок.Но это будет означать наличие дополнительных столбцов в таблице (ORA_ERR_MESG$ и ORA_ERR_TAG$).

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

См. Пакет DBMS_ERRLOG , чтобы узнать, как создавать таблицы регистрации ошибок.

После создания таблиц регистрации ошибок вы должны указать INSERT код для регистрации ошибок в вашей таблице регистрации ошибок.Это гарантирует, что все действительные записи будут вставлены в вашу таблицу сотрудников, а недействительные записи попадут в вашу таблицу ошибок со столбцом, в котором хранится ошибка, возникшая при вставке этой конкретной записи.Таким образом, ваш код вставки будет выглядеть примерно так:

INSERT INTO VALID_EMPLOYEES
    SELECT ID,
             NAME,
             SALARY,
             BIRTHDAY
      FROM my_source_table
          LOG ERRORS INTO INVALID_EMPLOYEES ('Oops this guy failed');

В этом случае сообщение «К сожалению, этот парень не удалось» попадет в столбец ORA_ERR_TAG$ таблицы ошибок.Вы можете использовать этот столбец тега для определения различных операторов вставки, которые пытались вставить неверную запись.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...