No Oracle 12c em diante, no qual o Oracle Apex está instalado por padrão, você pode usar
APEX_ZIP
Pacote PL/SQL para compactar os arquivos. Então aqui estou dando alguns Oracle APEX_ZIP
exemplos:Exemplo do Oracle APEX_ZIP
O seguinte código PL/SQL obtém os arquivos (
BLOB
) de uma tabela e compacta-a, e fornece um BLOB
final que tem todos os arquivos que você adicionou. 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;
Você pode ver no código acima que no final, você obterá o
BLOB
final que você pode armazenar na tabela ou enviá-lo para um procedimento ou gravar um arquivo no servidor. O exemplo a seguir é uma adição ao código acima. Depois de compactar os arquivos, ele gravará o arquivo zip no servidor.
Arquivos Zip usando o pacote APEX_ZIP e Gravar no Servidor
Para gravar o arquivo no servidor, você precisa de um objeto Oracle Directory. Abaixo segue um exemplo de como criar um objeto de diretório no Oracle apontando para um diretório no servidor.
Create or Replace directory my_dir as '/your/server/path';
Depois de criar o diretório, você pode escrever o arquivo zip conforme mostrado no exemplo abaixo:
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;
Após executar o código PL/SQL acima, você encontrará o arquivo
my_zip.zip
no MY_DIR
localização do diretório no servidor. Tutoriais relacionados:
- Como obter o BLOB do arquivo em PL/SQL?
- Como descompactar um arquivo em PL/SQL?
Referência:
- Manual Oracle APEX_ZIP
-
O que é o operador lógico LIKE no SQL Server - Tutorial SQL Server / TSQL Parte 123
-
Adicionando recursos mais avançados, como gerenciar categorias e votar em tópicos e postagens
-
Relatando dados de desempenho do SQLDIAG por meio da ferramenta RML Utilities | Solução de problemas de desempenho do SQL Server -7
-
7 ferramentas gratuitas de diagramação de banco de dados para pessoas ocupadas com dados