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

Jak zkontrolovat, zda soubor používá obrázek PL/SQL?

V tomto příspěvku na blogu sdílím funkci, pomocí které můžete zkontrolovat, zda je soubor obrazovým souborem nebo zda nepoužívá PL/SQL. Program zkontroluje soubor tak, že přečte jeho hlavičku, nikoli příponu souboru. V současné době může funkce identifikovat tři typy obrázků, kterými jsou JPG, PNG a GIF.

Funkce PL/SQL pro kontrolu, zda je soubor obrazovým souborem

Následující funkce PL/SQL přečte hlavičku souboru a poté vrátí typ obrázku v datovém typu varchar2. Funkce get_image_type přebírá dva argumenty, které jsou následující:

  1. Objekt adresáře Oracle (jako i_dir) Naučte se, jak vytvořit Oracle Directory Object.
  2. Název souboru (jako i_file) soubor by měl existovat v adresáři.
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;

Test

V níže uvedeném programu PL/SQL změňte objekt adresáře MY_FILES Oracle svým objektem adresáře a změňte název souboru pomocí souboru dostupného v umístění adresáře 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;
/

Výstup

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

Viz také:

  • Jak vložit soubor do tabulky Oracle pomocí PL/SQL?
  1. Upravte počáteční hodnotu Django AutoField

  2. VMware CPU Hot Plug vNUMA Effects na SQL Server

  3. Získat všechny názvy tabulek konkrétní databáze pomocí SQL dotazu?

  4. Jak zjistit, že transakce již byla zahájena?