Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zapisać BLOB jako plik w PL/SQL?

Tutaj podaję przykład zapisywania danych BLOB jako pliku w PL/SQL. Dane BLOB można uzyskać z tabeli zawierającej kolumnę BLOB lub z pliku na dysku.

Przykład funkcji PL/SQL do zapisywania BLOB jako pliku

Poniższa procedura przyjmuje następujące trzy argumenty:

  1. Nazwa obiektu Oracle Directory (jako i_dir).
  2. Zapisz jako nazwę pliku (jako i_file).
  3. Dane BLOB (jako i_blob).
CREATE OR REPLACE PROCEDURE blob_to_file (i_dir    IN VARCHAR2,
                                          i_file   IN VARCHAR2,
                                          i_blob   IN BLOB)
AS
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
BEGIN
   l_blob_len := DBMS_LOB.getlength (i_blob);

   l_file :=
      UTL_FILE.fopen (i_dir,
                      i_file,
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP
      DBMS_LOB.read (i_blob,
                     l_amount,
                     l_pos,
                     l_buffer);
      UTL_FILE.put_raw (l_file, l_buffer, TRUE);
      l_pos := l_pos + l_amount;
   END LOOP;

   UTL_FILE.fclose (l_file);
EXCEPTION
   WHEN OTHERS
   THEN
      IF UTL_FILE.is_open (l_file)
      THEN
         UTL_FILE.fclose (l_file);
      END IF;

      RAISE;
END blob_to_file;

Test

Poniższy blok PL/SQL wywoła powyższą procedurę, przekazując obiekt katalogu Oracle, nazwę pliku i dane BLOB. Dla danych BLOB używam funkcji GET_BLOB, dla której podałem przykład w moim poprzednim wpisie na blogu:Pobierz BLOB z pliku w PL/SQL. W poniższym przypadku pobierze dane BLOB z pliku myfile.jpg z lokalizacji MY_DIR i zapisze je w pliku abc.jpg w lokalizacji IMG_DIR.

DECLARE
   f_blob   BLOB;
BEGIN
   /* check the above mentioned link for get_blob function example */
   f_blob := get_blob ('MY_DIR', 'myfile.jpg');
   /* now pass the blob to blob_to_file procedure to save it as a file */
   blob_to_file ('IMG_DIR', 'abc.jpg', f_blob);
END;

Teraz możesz sprawdzić lokalizację katalogu IMG_DIR dla pliku utworzonego przez BLOB.

Zobacz też:

  • Jak utworzyć obiekt Oracle Directory?
  • Dowiedz się, jak wyodrębnić dane BLOB z tabeli Oracle za pomocą Toad
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego nie mogę tworzyć wyzwalaczy na obiektach należących do SYS?

  2. Oracle ODP.Net z Entity Framework 6 — nie można znaleźć dostawcy zgodnego z bazą danych Entity Framework

  3. Zagadnienia dotyczące wydajności danych tymczasowych w Oracle

  4. Podłączanie SQL Server do Oracle

  5. Jaki jest idealny zestaw narzędzi do programowania w PL/SQL?