Команда пакета СУБД Oracle для экспорта содержимого таблицы в виде оператора INSERT - PullRequest
3 голосов
/ 02 декабря 2011

Существует ли какая-либо подпрограмма, аналогичная DBMS_METADATA.GET_DDL, которая действительно может экспортировать данные таблицы в виде INSERT операторов?

Например, при использовании DBMS_METADATA.GET_DDL('TABLE', 'MYTABLE', 'MYOWNER') будет экспортирован сценарий CREATE TABLE для MYOWNER.MYTABLE.Любые такие вещи для генерации всех данных из MYOWNER.MYTABLE как INSERT операторов?

Я знаю, что, например, TOAD Oracle или SQL Developer могут экспортировать как INSERT операторы довольно быстро, но мне нужен более программный способ дляДелать это.Также я не могу создавать какие-либо процедуры или функции в базе данных, с которой я работаю.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 22 декабря 2011

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

Однажды я написал такой пакет и быстро пожалел об этом. Легко получить что-то, что работает в 99% случаев, но этот последний 1% убьет вас.

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

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

Если вы хотите, чтобы ваши данные были точными, вам просто нужно использовать утилиты Oracle, такие как сбор данных и экспорт.

0 голосов
/ 11 декабря 2013

Oracle SQL Developer делает это с помощью функции экспорта.DDL, а также сами данные.Может быть немного неудобно для больших таблиц и может вызвать проблемы в случаях, упомянутых выше, но хорошо работает в 99% случаев.

0 голосов
/ 02 декабря 2011

Почему вы не используете обычный экспорт?
Если вам нужно, вы можете сгенерировать скрипт экспорта:

Давайте предположим, что таблица myTable (Имя VARCHAR (30), Номер ВОЗРАСТА, Адрес VARCHAR (60)).

select 'INSERT INTO myTable values(''' || Name || ','|| AGE ||',''' || Address ||''');' from myTable

...