sql >> Database teknologi >  >> RDS >> Oracle

Indsæt BLOB-teststreng større end 2000 eller 4000 bytes

For det første skal du forstå, hvad LOB'er er. De er "store data", muligvis større end nogen andre datatyper i Oracle. De er som almindelige filer på et filsystem. For at skrive til en fil på et filsystem, skal du

  1. åbn filen til skrivning
  2. afkort filen, hvis du ønsker at begynde at udfylde den fra bunden
  3. læs dine kildedata i bidder i en løkke
  4. tilføj dine datastykker til filen i samme løkke, én efter én
  5. luk filen

Mere eller mindre det samme gælder for LOB'er. I din tabel er en LOB (CLOB/BLOB/NCLOB) kolonne blot en pegepind/reference til et andet sted på dit disklager, der indeholder de faktiske data. I standard Oracle-termer kaldes markøren "LOB locator". Du skal

  1. åbn/initialiser LOB-lokalisatoren
  2. trunker LOB-indholdet, hvis du ønsker at begynde at udfylde det fra bunden
  3. tilføj dine datastykker til LOB-indholdet i en loop, én efter én
  4. luk LOB-finderen

I PL/SQL kunne det se sådan ud:

-- 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 forklaring:

  1. initialiser LOB-lokalisatoren =insert into blob_test values(1,empty_blob()) returning b into v_b;
  2. åbn LOB-locatoren for at skrive =dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  3. trunker LOB-indholdet, hvis du ønsker at begynde at udfylde det fra bunden ... Dette gøres af empty_blob() indkald insert .
  4. tilføj dine datastykker til LOB-indholdet i en loop, én efter én =her kun én iteration af dbms_lob.writeappend() , ved at tilføje kun en enkelt del aaa af længden utl_raw.length(aaa) (maksimalt 32767) ind i LOB v_b
  5. luk LOB-lokalisatoren =dbms_lob.close(LOB_LOC=>v_b);


  1. Hibernates saveOrUpdate ignorerer kolonneegenskaben ikke-nul

  2. Når du designer databaser, hvad er den foretrukne måde at gemme flere sande/falske værdier på?

  3. Hvordan sætter jeg MySQL op til at fungere med C#?

  4. Top fem softwareapplikationer til at få adgang til MySQL/MariaDB-servere