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

Вмъкнете BLOB тестов низ, по-голям от 2000 или 4000 байта

Като за начало трябва да разберете какво представляват LOB. Те са „големи данни“, вероятно по-големи от всички други типове данни в Oracle. Те са като обикновени файлове във файлова система. За да пишете във файл във файлова система, ще трябва да

  1. отворете файла за запис
  2. съкратете файла, ако искате да започнете да го попълвате от нулата
  3. прочетете изходните си данни на части в цикъл
  4. добавете вашите части от данни към файла в същия цикъл, един по един
  5. затворете файла

Горе-долу същото важи и за LOB. Във вашата таблица колона LOB (CLOB/BLOB/NCLOB) е просто указател/препратка към друго място на вашето дисково хранилище, съдържащо действителните данни. В стандартните термини на Oracle указателят се нарича "LOB локатор". Трябва да

  1. отворете/инициализирайте LOB локатора
  2. съкратете LOB съдържанието, ако искате да започнете да го попълвате от нулата
  3. добавете вашите части от данни към съдържанието на LOB в цикъл, един по един
  4. затваряне на LOB локатора

В PL/SQL може да изглежда така:

-- create table blob_test(id number, b blob);

declare 
  v_b blob; 
  aaa raw(32767);
  longLine varchar2(32767);
begin 
  longLine :=  LPAD('aaaa', 32767,'x');
  aaa := UTL_RAW.CAST_TO_RAW(longLine);
  insert into blob_test values(1,empty_blob()) returning b into v_b;
  dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  dbms_lob.writeappend(v_b,UTL_RAW.LENGTH (aaa) ,aaa);
  dbms_lob.close(LOB_LOC=>v_b);
  commit;
end;

Обяснение:

  1. инициализиране на LOB локатора =insert into blob_test values(1,empty_blob()) returning b into v_b;
  2. отворете LOB локатора за запис =dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  3. съкратете LOB съдържанието, ако искате да започнете да го попълвате от нулата ... Това се прави от empty_blob() извикване в insert .
  4. добавете вашите части от данни към съдържанието на LOB в цикъл, един по един =тук само една итерация на dbms_lob.writeappend() , добавяйки само едно парче aaa с дължина utl_raw.length(aaa) (максимум 32767) в LOB v_b
  5. затваряне на LOB локатора =dbms_lob.close(LOB_LOC=>v_b);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ASP.net MVC и обединяване на връзки с Oracle, позволяващи повече връзки от посочените в Макс. размер на пула

  2. нежелано водещо празно място в числовия формат на Oracle

  3. Нарушен - родителският ключ не е намерен 02291. 00000 - ограничение за интегритет

  4. Oracle sql типове през dblink

  5. Вземете горния ред след подреждане по в Oracle Subquery