sql >> Databasteknik >  >> RDS >> Oracle

Arbeta med BLOB-objekt i Oracle

Sedan UTL_ENCODE.BASE64_ENCODE Funktionen fungerar på RAWs, den kommer att fungera med BLOBs upp till 32767 byte i PL/SQL eller 4000 byte i SQL.

Om dina bilder är större måste du skriva din egen funktion. Här är ett exempel:

CREATE OR REPLACE FUNCTION base64_encode_blob (p BLOB) RETURN BLOB IS
   l_raw    RAW(24573);
   l_base64 RAW(32767);
   l_result BLOB;
   l_offset NUMBER := 1;
   l_amount NUMBER := 24573;
BEGIN
   DBMS_LOB.createtemporary(l_result, FALSE);
   DBMS_LOB.open(l_result, DBMS_LOB.lob_readwrite);
   LOOP
      DBMS_LOB.read(p, l_amount, l_offset, l_raw);
      l_offset := l_offset + l_amount;
      l_base64 := utl_encode.base64_encode(l_raw);
      DBMS_LOB.writeappend(l_result, utl_raw.length(l_base64), l_base64);
   END LOOP;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      RETURN l_result;
END;
/


  1. Handledning för SQL Server-tabellpartitionering och partitioner

  2. Matcha utbud med efterfrågan utmaning

  3. Dynamisk MySQL med lokala variabler

  4. Kan jag använda ett Postgres-nyckelord som ett alias i den valda listan?