Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:експортирайте таблица с blobs в .sql файл, който може да бъде импортиран отново

Не мисля, че това е възможно с SQL Developer (но тогава не го използвам много често).

SQL клиентът, който използвам - SQL Workbench/J - може да направи това.

Има няколко начина за експортиране на тези данни.

Генерирайте собствен скрипт

Може да създаде SQL скрипт, който използва специална (специфична за инструмента) нотация за препратка към външен файл, нещо като:

INSERT INTO images
  (name, data)
VALUES
  ('foobar', {$blobfile='blob_r1_c2.data'});
 

Горният оператор може да се изпълни отново само със SQL Workbench. Не е съвместим с друг SQL клиент.

Използвайте utl_raw

Друга алтернатива е да използвате "blob литерал", но поради ограничението на Oracle от 4000 байта за символен литерал, това работи само за наистина малки стойности на петна:

INSERT INTO images
  (name, data)
VALUES
  ('foobar', to_blob(utl_raw.cast_to_raw('......')));
 

където символният литерал за cast_to_raw call ще съдържа шестнадесетичните стойности на BLOB. Тъй като това изисква 2 знака на "blob байт", не можете да обработвате BLOB, по-големи от 2000 байта с това. Но този синтаксис ще работи за почти всички инструменти на Oracle SQL (ако могат да обработват скриптове с много дълги редове).

SQL*Loader входен файл

Третата алтернатива е да експортирате данните в текстов файл, който може да бъде импортиран с помощта на SQL*Loader:

Текстовият файл ще съдържа нещо подобно:

NAME DATAfoobar blob_r1_c2.data

Заедно със следния контролен файл на SQL*Loader:

ОПЦИИ (skip=1) ЗАРЕЖДАНЕ НА НАБОР ЗА ДАННИ 'WE8ISO8859P15'INFILE 'images.txt'ДОЛОЖЕНИЕ КЪМ ТАБЛИЦА ИЗОБРАЖЕНИЯ ПОЛЕТА, ПРЕКРАТЯВАНИ ОТ '\t' TRAILING NULLCOLS( NAME, lob_file_data FILLER)> 

Това може да се зареди с помощта на SQL*Loader и следователно не се нуждае от SQL Workbench за импортиране на данните.

Повече подробности са в ръководството

Редактиране

Както Алекс посочи в коментара си, можете също да използвате експортиране на DataPump - но това изисква да имате достъп до файловата система на сървъра. Всички горепосочени решения съхраняват данните на клиента.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо този шаблон за хибернация bulkUpdate не работи

  2. Как да конвертирам XMLTYPE в VARCHAR в ORACLE?

  3. Вземете BLOB от колоната BFILE в Oracle

  4. Връщане на стойността на колоната за идентичност след вмъкване в Oracle

  5. SQL ROWNUM как да върнете редове между конкретен диапазон