sql >> Databáze >  >> RDS >> Oracle

Příklad APEX_ZIP

V systému Oracle 12c a novějším, na kterém je standardně nainstalován Oracle Apex, můžete použít APEX_ZIP PL/SQL balíček pro zip souborů. Takže zde dávám několik Oracle APEX_ZIP příklady:

Příklad Oracle APEX_ZIP

Následující kód PL/SQL získá soubory (BLOB ) z tabulky a zazipujte jej a získáte konečný BLOB který obsahuje všechny soubory, které jste přidali.

declare
   b_zip_file blob;

   cursor c_files
    is
    select file_name,
    file_content
    from emp_files
       where empno = 7894;

begin
   for c in c_files 
   loop
      -- adds the each blob to b_zip_file blob one by one
      apex_zip.add_file (
      p_zipped_blob => b_zip_file,
      p_file_name => c.file_name,
      p_content => c.file_content );
   end loop;

   -- finalizes the blob
   apex_zip.finish (
     p_zipped_blob => b_zip_file );

end;

Ve výše uvedeném kódu můžete vidět, že na konci získáte finální BLOB kterou můžete dále uložit do tabulky nebo ji odeslat do procedury nebo zapsat soubor na server.

Následující příklad je doplňkem k výše uvedenému kódu. Po zazipování souborů zapíše soubor zip na server.

Zip soubory pomocí balíčku APEX_ZIP a zápis na server

Chcete-li zapsat soubor na server, potřebujete objekt Oracle Directory. Níže je uveden příklad, jak vytvořit adresářový objekt v Oracle ukazující na adresář na serveru.

Create or Replace directory my_dir as '/your/server/path';

Po vytvoření adresáře můžete zapsat soubor zip, jak je znázorněno v níže uvedeném příkladu:

declare
   b_zip_file blob;

   -- variables for writing the files
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
   -- end variable declaration for file
   cursor c_files
    is
    select file_name,
    file_content
    from emp_files
       where empno = 7894;
begin
   for c in c_files 
   loop
      -- adds the each blob to b_zip_file blob one by one
      apex_zip.add_file (
      p_zipped_blob => b_zip_file,
      p_file_name => c.file_name,
      p_content => c.file_content );
   end loop;

   -- finalizes the blob
   apex_zip.finish (
     p_zipped_blob => b_zip_file );
   
   -- write the file
   l_blob_len := DBMS_LOB.getlength (b_zip_file);

   l_file :=
      UTL_FILE.fopen ('MY_DIR',
                     'my_zip.zip',
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP

      DBMS_LOB.read (b_zip_file,
                     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);
end;

Po spuštění výše uvedeného PL/SQL kódu najdete soubor my_zip.zip v MY_DIR umístění adresáře na serveru.

Související výukové programy:

  • Jak získat BLOB ze souboru v PL/SQL?
  • Jak rozbalit soubor v PL/SQL?

Odkaz:

  • Příručka Oracle APEX_ZIP
  1. Funkce TAN() v Oracle

  2. PostgreSQL - deaktivace omezení

  3. Použijte TYPEPROPERTY() k vrácení informací o datovém typu na serveru SQL Server

  4. Jak nastavíte autocommit v relaci SQL Server?