Как получить внешнюю таблицу Oracle «файл дампа», не выполняя «CREAT TABLE» - PullRequest
0 голосов
/ 23 марта 2012

У меня есть для разработки процедуры PL / SQL, которая выводит содержимое таблицы при возникновении ошибки во время транзакции приложения, содержимое дампа должно соответствовать содержимому таблицы до ROLLBACK транзакции.

Я думал об использовании внешней таблицы в качестве формата дампа таблицы (TYPE ORACLE_DATAPUMP).Изучив документацию по Oracle, я обнаружил, что единственный способ сделать это - выполнить:

CREATE TABLE tabtest_test (
F1 NUMBER,
F2 CHAR(10))
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY USER_DUMP_DEST
LOCATION ('tabtest.dmp’));

Проблема в том, что, выполняя «CREATE TABLE», Oracle выполняет неявную фиксацию в нашей неудачной транзакции,необходимо выполнить откат после дампа таблицы.

Я думал об использовании «PRAGMA AUTONOMOUS_TRANSACTION;» для выполнения «CREATE TABLE», но это на самом деле не соответствует нашим потребностям, так как выводит содержимоетаблицы вне транзакции нашего приложения.

Мой вопрос: есть ли способ получить «tabtest.dmp», не выполняя «CREATE TABLE»?например, путем прямого доступа к Oracle API, ответственного за это.

С уважением.

Ответы [ 3 ]

1 голос
/ 23 марта 2012

Как насчет создания внешней таблицы один раз, как часть процесса установки приложения?

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

0 голосов
/ 23 марта 2012

Зачем вам нужно использовать внешние таблицы?Вы можете просто прочитать файл, используя UTL_FILE.

0 голосов
/ 23 марта 2012

Если (и это большой IF) вы можете использовать AUTONOMOUS_TRANSACTIONS для создания таблицы в отдельной транзакции, я думаю, это то, что вам нужно сделать. Если вам удастся создать таблицу в рамках текущей транзакции и записать данные в эту вновь созданную таблицу, эти данные со всеми правами исчезнут, как только вы выполните ROLLBACK.

Проблемы, с которыми вы здесь сталкиваетесь, являются подмножеством большого класса проблем, известных как «Проблемы, возникающие при попытке обработать реляционную базу данных как плоский файл». Реляционные базы данных хороши, когда используются как базы данных, но очень плохо работают с плоскими файлами. Это похоже на животных на ферме - овцы хороши, как овцы, но делают паршивых коров. Коровы делают паршивых коз. Козы - великие животные - умные, ласковые (да), не требующие особого ухода, не услышат ни слова, сказанного против них, - но НЕ то, что вы хотите от тяглового животного - используйте для этого лошадь, быка или мула. В основном, вы должны выбрать лошадей для курсов (простите за выражение). База данных создает дерьмовый плоский файл, и наоборот. Используйте то, что подходит.

IMO, вам лучше записать свои данные в плоский файл, и, возможно, этот файл может быть отображен как внешняя таблица. Возможно, вы захотите записать файл в формате CSV, который может обрабатывать множество других инструментов. YMMV.

Делись и наслаждайся.

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