Сделка с RAW of ORACLE (Архив-Восстановление)

Я работаю над проектом, который имеет дело с ORACLE DATABASE. Мой проект имеет две функциональные возможности: одна загрузка содержимого таблицы в плоский файл, или резервное копирование, и вторая передача этого плоского файла для восстановления этих данных обратно в пустую таблицу, имеющую такую ​​же структуру, что и восстановление.

Я могу создавать резервные копии и восстанавливать данные базы данных Oracle для всех объектов типа данных, кроме RAW | LONG RAW. У меня есть проблема по этому поводу. Например, я делаю резервную копию данных базы данных в плоский файл в строке. лайк

1,"Name", "Class",12.00 

Теперь, если какая-либо таблица имеет тип данных RAW или LONG RAW, то во время вставки в таблицу она может быть вставлена ​​из любого типа данных в необработанный тип, используя метод RAWTOHEX. Чтобы лучше разобраться в этом деле, мы сейчас берем две таблицы.

  1. в одной таблице указано TBLNUM и идентификатор столбца NUMBER, RAWINT RAW(2000)

  2. вторая таблица говорит, что TBLCHAR и их столбец ID NUMBER, RAWCHAR RAW(2000)

Поэтому мы вставляем данные в TBLNUM для значения num в raw, используя только числа, и TBLCHAR только для строки.

Я не очень знаю об этом типе. Но я могу вернуть вставленные данные следующим образом. Если я вставлю номер для столбца RAW с помощью RAWTOHEX(1), он сохранит 1 в виде 'C102', и я смогу вернуть 1, используя следующий метод utl_raw.cast_to_number('C102 ")

То же самое я могу сделать для STRING RAWTOHEX('7D') -> 3744 и получить обратно по ult_raw.cast_to_varchar2('3744') -> 7D

во-первых, пожалуйста, исправьте меня, если я не прав, во-вторых, если я прав, тогда мой вопрос заключается в том, как определить из плоского файла, что данное значение столбца RAW создано из INTEGER VALUE ИЛИ STRING VALUE

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

0 ответов

Я думаю, вам не следует изменять значение типа сырых данных при резервном копировании базы данных (не используйте cast_to_number а также cast_to_varchar2). Поэтому сохраните необработанные данные как шестнадцатеричную строку, а затем вставьте шестнадцатеричную строку в пункт назначения. Когда вы выбираете необработанные данные в разработчике sql, они представлены в виде шестнадцатеричной строки и для вставки необработанных данных в базу данных ваш скрипт должен содержать шестнадцатеричную строку:

insert into table1 (num_col, varchar2_col1,varchar2_col2,raw_col)
  values(1, 'Name', 'Class', 'C102')

Если ваша программа хочет извлечь необработанные данные из базы данных, вы должны получить значение столбца как byte[] и записать его как шестнадцатеричную строку в файл.

Другие вопросы по тегам