Насколько я знаю, в Oracle нет пакета для этого. И я скептически отношусь к любому стороннему инструменту, который претендует на достижение этой цели, потому что это в принципе невозможно.
Однажды я написал такой пакет и быстро пожалел об этом. Легко получить что-то, что работает в 99% случаев, но этот последний 1% убьет вас.
Если вам действительно нужно что-то подобное и нужно, чтобы оно было очень точным, вы должны тщательно контролировать, какие данные разрешены и какие инструменты можно использовать для запуска сценария. Ниже приведена небольшая часть проблем, с которыми вы столкнетесь:
- Экранирование
- Одиночные вставки очень медленные (особенно если они идут по сети)
- Объединение вставок выполняется быстрее, но может привести к неприятным ошибкам при разборе, когда вы начнете вставлять сотни строк
- Существует много потенциальных типов данных, в том числе пользовательских. У вас могут быть только NUMBER, VARCHAR2 и DATE, но что произойдет, если кто-нибудь добавит RAW, BLOB, BFILE, вложенные таблицы и т. Д .?
- Хранение больших объектов требует разбивки данных на куски из-за ограничений размера VARCHAR2 (4000 или 32767, в зависимости от того, как вы это делаете).
- Проблемы с набором символов - это сведет вас с ума.
- Ограничения среды - например, SQL * Plus не допускает более 2500 символов в строке и удаляет пробелы в конце вашей строки.
- Ссылочная целостность. Вам нужно будет отключить эти ограничения или вставить данные в правильном порядке.
- «Поддельные» столбцы - виртуальные столбцы, XML-объекты и т. Д. - не импортируйте их.
- Отсутствующие разделы - если вы не используете разделы INTERVAL, возможно, вам придется создать их вручную.
- Новолидированные данные - может быть нарушено практически любое ограничение, поэтому вам может потребоваться отключить все.
Если вы хотите, чтобы ваши данные были точными, вам просто нужно использовать утилиты Oracle, такие как сбор данных и экспорт.