sql >> データベース >  >> RDS >> Oracle

APEX_ZIPの例

    OracleApexがデフォルトでインストールされているOracle12c以降では、APEX_ZIPを使用できます。 ファイルを圧縮するためのPL/SQLパッケージ。そこで、ここでいくつかのOracle APEX_ZIPを提供します。 例:

    OracleAPEX_ZIPの例

    次のPL/SQLコードはファイルを取得します(BLOB )テーブルから圧縮して、最終的なBLOBを取得します。 追加したすべてのファイルが含まれています。

    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;
    をファイナライズします

    上記のコードで、最後に最終的なBLOBを取得することがわかります。 これをさらにテーブルに保存したり、プロシージャに送信したり、サーバーにファイルを書き込んだりできます。

    次の例は、上記のコードへの追加です。ファイルをzipすると、zipファイルがサーバーに書き込まれます。

    APEX_ZIPパッケージを使用したZipファイルとサーバーへの書き込み

    サーバーにファイルを書き込むには、OracleDirectoryオブジェクトが必要です。以下は、サーバー上のディレクトリを指すディレクトリオブジェクトをOracleで作成する方法の例です。

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

    ディレクトリを作成したら、次の例に示すようにzipファイルを作成できます。

    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;

    上記のPL/SQLコードを実行すると、ファイルmy_zip.zipが見つかります。 MY_DIRで サーバー上のディレクトリの場所。

    関連チュートリアル:

    • PL / SQLのファイルからBLOBを取得するにはどうすればよいですか?
    • PL / SQLでファイルを解凍するにはどうすればよいですか?

    参照:

    • APEX_ZIPOracleマニュアル
    1. C#はoracleストアド関数を呼び出します

    2. Linux上のSQLServer

    3. 実用的な例を使用したSQLiteCROSSJOIN

    4. mysql SQL:特定のアイテムが最初になり、次に残りのアイテムを並べ替えます