sql >> Database >  >> RDS >> Oracle

APEX_ZIP Voorbeeld

In Oracle 12c en later, waarop Oracle Apex standaard is geïnstalleerd, kunt u APEX_ZIP gebruiken PL/SQL-pakket om de bestanden te zippen. Dus hier geef ik een paar Oracle APEX_ZIP voorbeelden:

Oracle APEX_ZIP Voorbeeld

De volgende PL/SQL-code haalt de bestanden op (BLOB ) uit een tabel en zip het, en je krijgt een laatste BLOB die alle bestanden bevat die je hebt toegevoegd.

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;

Je kunt in de bovenstaande code zien dat je aan het einde de laatste BLOB . krijgt die u verder in de tabel kunt opslaan of naar een procedure kunt sturen of een bestand op de server kunt schrijven.

Het volgende voorbeeld is een aanvulling op de bovenstaande code. Na het zippen van de bestanden, zal het het zipbestand naar de server schrijven.

Zip bestanden met APEX_ZIP pakket en schrijf naar de server

Om het bestand op de server te schrijven, hebt u een Oracle Directory-object nodig. Hieronder ziet u een voorbeeld van hoe u een directory-object in Oracle kunt maken dat naar een directory op de server wijst.

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

Nadat u de map hebt gemaakt, kunt u het zipbestand schrijven zoals in het onderstaande voorbeeld:

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;

Na het uitvoeren van de bovenstaande PL/SQL-code, vindt u het bestand my_zip.zip op de MY_DIR directorylocatie op de server.

Verwante tutorials:

  • Hoe haal ik BLOB uit een bestand in PL/SQL?
  • Hoe kan ik een bestand uitpakken in PL/SQL?

Referentie:

  • APEX_ZIP Oracle-handleiding
  1. Hoe het MySQL-tekencoderingsprobleem op te lossen?

  2. EXECUTE FORMAT gebruiken ... GEBRUIKEN in de postgres-functie

  3. Verouderd:mysql_connect()

  4. Een tijdelijke oplossing voor de limiet van 255 kolommen voor toegang