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

PL / SQLを使用してファイルがイメージであるかどうかを確認するにはどうすればよいですか?

    このブログ投稿では、ファイルがイメージファイルであるか、PL/SQLを使用していないかを確認できる関数を共有しています。プログラムは、ファイルの拡張子名ではなくヘッダーを読み取ることによってファイルをチェックします。現在、この関数はJPG、PNG、GIFの3種類の画像を識別できます。

    ファイルがイメージファイルであるかどうかをチェックするPL/SQL関数

    次のPL/SQL関数は、ファイルヘッダーを読み取り、varchar2データ型の画像型を返します。関数get_image_typeは2つの引数を取り、それらは次のとおりです。

    1. OracleDirectoryオブジェクト (i_dirとして)OracleDirectoryオブジェクトを作成する方法を学びます。
    2. ファイル名 (i_fileとして)ファイルはディレクトリに存在する必要があります。
    CREATE OR REPLACE FUNCTION get_image_type (i_dir    IN VARCHAR2,
                                               i_file   IN VARCHAR2)
       RETURN VARCHAR2
    AS
       l_bfile       BFILE;
       l_blob        BLOB;
       l_file_type   VARCHAR2 (50);
    BEGIN
       DBMS_LOB.createtemporary (l_blob, FALSE);
       l_bfile := BFILENAME (i_dir, i_file);
       DBMS_LOB.fileopen (l_bfile, DBMS_LOB.file_readonly);
       DBMS_LOB.loadfromfile (l_blob, l_bfile, DBMS_LOB.getlength (l_bfile));
       DBMS_LOB.fileclose (l_bfile);
    
       IF RAWTOHEX (DBMS_LOB.SUBSTR (l_blob, 8, 1)) = '89504E470D0A1A0A'
       THEN
          l_file_type := 'PNG';
       ELSIF DBMS_LOB.SUBSTR (l_blob, 3, 1) = '474946'
       THEN
          l_file_type := 'GIF';
       ELSIF RAWTOHEX (DBMS_LOB.SUBSTR (l_blob, 3, 1)) = 'FFD8FF'
       THEN
          l_file_type := 'JPG';
       ELSE
          l_file_type := 'The file is not an image.';
       END IF;
    
       RETURN l_file_type;
    EXCEPTION
       WHEN OTHERS
       THEN
          IF DBMS_LOB.fileisopen (l_bfile) = 1
          THEN
             DBMS_LOB.fileclose (l_bfile);
          END IF;
    
          DBMS_LOB.freetemporary (l_blob);
          RETURN 'The file does not exists.';
    END get_image_type;

    テスト

    以下のPL/SQLプログラムで、MY_FILES Oracleディレクトリ・オブジェクトをディレクトリ・オブジェクトに変更し、ファイル名をMY_FILESディレクトリの場所にあるファイルに変更します。

    SET SERVEROUTPUT ON;
    
    DECLARE
       i_image_type   VARCHAR2 (50);
    BEGIN
       i_image_type := get_image_type ('MY_FILES', 'oracle-logo-gif-to-use.gif');
    
       IF i_image_type IN ('JPG', 'GIF', 'PNG')
       THEN
          DBMS_OUTPUT.put_line ('The file is a valid ' || i_image_type || ' image.');
       ELSE
          DBMS_OUTPUT.put_line (i_image_type);
       END IF;
    END;
    /

    出力

    The file is a valid GIF image.
    PL/SQL procedure successfully completed.

    関連項目:

    • PL /SQLを使用してOracleテーブルにファイルを挿入する方法
    1. MySQL GaleraCluster4.0の新機能

    2. Oracleは全文検索をサポートしていますか?

    3. mysqlは、動的な行の値を列名として選択し、別の列を値として選択します

    4. PDOプリペアドステートメントを使用して、識別子(テーブル名またはフィールド名)または構文キーワードをバインドできますか?