sql >> Databasteknik >  >> RDS >> Oracle

Infoga BLOB-teststräng som är större än 2000 eller 4000 byte

Till att börja med måste du förstå vad LOB är. De är "stora data", möjligen större än någon annan datatyp i Oracle. De är som vanliga filer i ett filsystem. För att kunna skriva till en fil på ett filsystem måste du

  1. öppna filen för skrivning
  2. Trunkera filen om du vill börja fylla den från början
  3. läs dina källdata i bitar i en slinga
  4. lägg till dina databitar i filen i samma loop, en efter en
  5. stäng filen

Mer eller mindre samma sak gäller för LOB. I din tabell är en LOB (CLOB/BLOB/NCLOB) kolumn bara en pekare/referens till en annan plats på din disklagring som innehåller de faktiska data. I vanliga Oracle-termer kallas pekaren "LOB locator". Du måste

  1. öppna/initiera LOB-sökaren
  2. Trunkera LOB-innehållet om du vill börja fylla det från början
  3. lägg till dina databitar till LOB-innehållet i en loop, en efter en
  4. stäng LOB-sökaren

I PL/SQL kan det se ut så här:

-- 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;

En förklaring:

  1. initiera LOB-locatorn =insert into blob_test values(1,empty_blob()) returning b into v_b;
  2. öppna LOB-sökaren för att skriva =dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  3. Trunkera LOB-innehållet, om du vill börja fylla det från början ... Detta görs av empty_blob() anropa insert .
  4. lägg till dina databitar till LOB-innehållet i en loop, en efter en =här endast en iteration av dbms_lob.writeappend() , bara lägga till en enstaka bit aaa av längden utl_raw.length(aaa) (maximalt 32767) till LOB v_b
  5. stäng LOB-sökaren =dbms_lob.close(LOB_LOC=>v_b);


  1. MySQL Limit, Group och AVG Query

  2. XML-elementnamn från data i Postgres

  3. Lägg till en kolumn med ett standardvärde till en befintlig tabell i SQL Server

  4. MySQL Ta bort efterföljande radbrytningar från en kolumn